0x00 背景
最近因为疫情的原因憋在家实在无聊,搞了一下excel的宏编程
excel使用vba语言实现宏,虽然没学过 但是大致的代码可以看懂 就搞了一个打开excel自动运行宏 在ftp服务器上下载文件到本地的小脚本
0x01 配置
首先需要打开excel的宏,在excel的 开始-》选项-》信任中心 -》宏设置 -》启用所有宏 如下图
配置好宏以后,就可以开始宏编程了。
在开发工具选项中 选择Visual Basic进入宏编程界面
进入编程界面后双击左侧的 Thisbook,进入到当前工作表的编程模块
最后设置宏的自动启动,在该excel打开时,自动运行宏。 在右侧的选项卡中 选择open
至此,excel的设置完成。
0x02 vba实现ftp下载
在网上搜了好久才找到。一开始打算采用访问dos的方式,然后逐步传递命令。但发现excel不是单纯的将字符串传递到dos中运行,而是直接调用dos运行,这就导致无法传递单个字符到dos中。如果运行aaa命令会直接返回“无效命令”。
但还是记录下调用命令行的方法,万一以后有用呢=。=
Sub main()Shell "cmd /k ping 127.0.0.1", 1
End Sub
代码很简单,直接调用内置的接口函数即可。 前面表示字符串命令 后面1代表运行dos的黑窗口 0代表不运行(这个好!)
但是 这种方式不支持在dos中可以用 命令1 && 命令2 的方式 不知道为什么。
下面是我找到的方法。
Sub main()Dim env_addr, env_user, env_passwd, localftp, ftpfile, cfgfile As Stringenv_addr = "192.168.230.129"env_user = "用户名"env_passwd = "密码"localftp = "D:\"ftpfile = "/123.txt"cfgfile = "D:\1123.txt"If Dir(ftpfile) <> Empty ThenMsgBox "文件已成功下载"Exit SubEnd IfOpen cfgfile For Output As #1Print #1, "open " & env_addrPrint #1, env_userPrint #1, env_passwdPrint #1, "lcd " & localftpPrint #1, "bin"Print #1, "prompt"Print #1, "get " & ftpfilePrint #1, "bye"Close #1Shell "ftp -s:" & cfgfile, 1
End Sub
其中前三个参数不用多说
localftp 是本地的存储目录
ftpfile 是要获取的ftp服务器上的路径及文件名
cfgfile 为当前的配置文件 即要进行的一系列命令集
下面的open既是创建命令集的过程
最后通过Shell的形式运行命令。