- Office VBA开发经典:中级进阶卷
- 刘永富 刘行
- 2956字
- 2021-04-02 00:45:05
3.1 Shell调用WinRAR
WinRAR是一个文件压缩管理共享软件,由Eugene Roshal(所以RAR的全名是Roshal ARchive)开发。首个公开版本RAR 1.3发布于1993年。
WinRAR可以把文件(夹)压缩为.rar或.zip格式,如图3-1所示。
WinRAR可以解压的格式有:.CAB、.ARJ、.LZH、.TAR、.GZ、.ACE、.UUE、.BZ2、.JAR、.ISO、.Z、.7Z、.RAR5。
启动WinRAR软件,单击WinRAR软件的菜单【选项/设置】,弹出“设置”对话框,切换到“集成”选项卡,可以设置WinRAR能够解压的文件格式,如图3-2所示。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/877.jpg?sign=1739937643-ugrYbM8IbC3tkZlxDtpLwfCSb1Sq3jXW-0-eaf20255599d9fbe9f6beffaf9e1768d)
图3-1 “压缩文件名和参数”对话框
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/878.jpg?sign=1739937643-0iAnkTMPps5lSFIgdOOWPO01r9T7oyfq-0-16e3db4314c1f04fe2bdd54f19df31dd)
图3-2 勾选关联的扩展名
3.1.1 获取WinRAR可执行文件路径
WinRAR的执行文件一般情况下位于C:\Program Files\WinRAR\WinRAR.exe,如果个别计算机把这个软件安装到其他位置,使用前面讲过的WshShell对象的RegRead方法读取注册表可以获取其路径。
下面的GetSetupPath函数用来获取指定程序名的安装路径。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/879.jpg?sign=1739937643-ss9eutFWMiwkRSOZadm5UB4ASIGpcGRV-0-b87ddd2d6572532cec1aa47f1b4f0cdf)
运行下面的过程,可以获取WinRAR软件的安装路径以及PowerPoint的安装路径。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/880.jpg?sign=1739937643-k2CRSlYuluwrPv5NMyKltQLnqt6hyBdn-0-aa4616b1dd31cc9ac67f9a0373ac24c7)
上述程序的运行结果如图3-3所示。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/881.jpg?sign=1739937643-5M7qpXanTVW3TLvSIaKLzLwwMBE3asWV-0-126e7e55ab8e53e1f8c32df2af3cbf41)
图3-3 从注册表中获取应用程序的所在路径
3.1.2 命令和开关
获取到WinRAR.exe的所在路径,就可以使用Shell函数调用这个可执行文件完成压缩和解压缩操作。
调用格式如下。
Shell "WinRAR.exe的路径 命令 开关 压缩包路径 文件路径",vbNormalFocus(或者vbHide)
下面通过一个实例来介绍一下各参数的构造方法。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/883.jpg?sign=1739937643-54MYR7zihYwlypBhNxCPpbvucK6Lz0h2-0-eb797d4cf88ae720639808c200830c11)
以上语句的功能是,调用WinRAR.exe把65.png图片文件压缩到Regdll.rar这个压缩包中。可以看出各个参数之间用空格隔开,全部放入双引号内,形成了一个长的字符串。其中的A就是一个命令,表示压缩,上面这个实例没有用到开关参数。
下面分别介绍一下WinRAR的命令参数和开关参数。命令参数的功能是告知WinRAR要执行什么操作,是压缩、解压缩还是删除。开关参数是对命令参数的补充说明。
WinRAR命令参数
单击WinRAR的菜单【帮助/帮助主题】,可以打开其帮助文件,依次展开节点“命令行模式/命令行”,可以看到所有命令参数的说明,如图3-4所示。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/882.jpg?sign=1739937643-H5rWgBqzx4zhfEqsfMA6PwkcJvvbP4w0-0-4c5098513993abb7ddeecb21de49e802)
图3-4 WinRAR的命令参数帮助
最常用的4个命令参数及其功能如下。
A:压缩,添加到压缩文件中。
D:删除,从压缩包中删除文件。
E:解压缩到当前目录。
X:以完全路径解压。
可以看出,从压缩包中解压出内容,有E和X两个命令参数。其实,E命令参数等价于WinRAR解压参数中的“不要提取路径”;X命令参数等价于“提取完整路径”,使用WinRAR软件解压一个压缩包时,在“高级”选项卡里可以看到解压方式选项,如图3-5所示。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/884.jpg?sign=1739937643-3WWp4kh1kzOqEQeuK7Ggc8Y9Uu2Ltqtt-0-49b02ccb215f35e1a9aaa11b0722620b)
图3-5 命令参数相应的含义
简言之,E就是忽略压缩包中的路径,释放所有文件到目标文件夹,而X则按照压缩包原有的路径结构释放到目标文件夹。
WinRAR开关参数
在WinRAR软件的帮助文件中,依次展开节点“命令行模式/参数”,可以看到所有开关参数的说明,如图3-6所示。
下面是比较常用的开关参数。
-ep:忽略路径。
-ep1:忽略基准路径,但保持现有文件层次结构。
-p或-hp:压缩时加密码。
-df:压缩后删除原文件。
-dr:压缩后删除原文件到回收站。
大致了解命令参数和开关参数后,下面通过具体实例加深学习。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/001.jpg?sign=1739937643-M9ua9DMcPnQkI8EiUDvO2v38KW84wxrZ-0-3b56b37ff9541e23040f103c3993f92b)
图3-6 WinRAR开关参数帮助
3.1.3 压缩
假设文件夹“东北三省”中的内容如图3-7所示。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/002.jpg?sign=1739937643-Ot5iIhcnewLdrBHxfVyOhdFvg7AkXhdw-0-cc6ca64cdb7840c1a2a58674a12cfb74)
图3-7 文件夹内容的示意图
如果采用命令A-ep则是忽略所有路径,也就是忽略文件夹及其子文件夹,把“东北三省”下面管辖的所有文件(含递归)压缩进去。完整代码如下。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/004.jpg?sign=1739937643-udEzm9QvzVF8NshAArz1vRVSkL5M1Jd6-0-fcb6f15feb6d154ac16d58b74b3ad744)
代码分析:函数GetSetupPath用来获取WinRAR软件的安装目录,函数AddQuote用来处理Shell命令路径中的空格。要注意Command中要保留必要的空格。
以上代码段中,最重要的一句就是最后Shell函数的应用。
运行上面的“文件夹及其内容添加到压缩包”过程,会在E:盘下生成package1.rar压缩包,手工打开后,如图3-8所示。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/003.jpg?sign=1739937643-1kUe4Y5e32S6UPSTy6yF1XhyRMPKBub3-0-d61464444935b228dd7e313fd2325a33)
图3-8 自动执行压缩
可以看到,A-ep命令把文件夹中所有的“文件”掏出来,放入压缩包,而不管这些文件原先在何处。
现在只需把上述代码中的Command换成"A-ep1",删除原先的压缩包,再运行一次程序,效果如图3-9所示。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/005.jpg?sign=1739937643-rODu9ZRc2chTULQg8mLfFHRWv0EpoKyX-0-26078bb43adace018e9dfd32c8134106)
图3-9 连文件夹一起压缩
可以看出,该命令保留了原先文件结构。因此,可以简单地理解为-ep参数只压缩文件,-ep1带文件夹压缩。
在实际应用中,根据需要选择开关参数即可。
3.1.4 解压缩
解压缩是将压缩包中的内容释放到磁盘下的操作。解压缩的命令有E和X。
下面的过程把压缩包package1.rar中所有的文件解压到Destination文件夹下。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/007.jpg?sign=1739937643-aDl6hLms8FnhSBwG7aiUa6sxODqzVatv-0-967f0a2b73c2013072572b809c0b9eba)
运行上述程序,把压缩包中的文件直接释放到目标文件夹,如图3-10所示。
如果把Command改为Command = " X ",再次运行上述程序,压缩包中的文件夹和文件一律解压到目标文件夹中,如图3-11所示。
上面的实例把压缩包中所有内容解压到目标文件夹,使用以下代码可以解压压缩包中指定路径的文件,而不是解压全部文件。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/006.jpg?sign=1739937643-zdYYinbVPOovkIiGBArl7w0dRHmIrL3A-0-0b14b64fa4fd6b30b2266d2653057fbe)
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/008.jpg?sign=1739937643-qEtsv49irYy6N4nuibSLbpMccsMLwSbr-0-7d04f7c3f7edbec13b3b717f7d93f5cb)
图3-10 自动解压
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/009.jpg?sign=1739937643-AOKnLyXRU2qLNOxiNWMggDvUsXogGjGr-0-60243ecbcb55bda89d6b0c6e74ab3080)
图3-11 连文件夹一起解压
3.1.5 删除
WinRAR使用命令D删除压缩包中的文件或路径。
下面的实例把package1.rar压缩包中的“吉林”文件夹删除。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/011.jpg?sign=1739937643-3R23AZtLYEj3kLW0iY8NBbimmePdNev1-0-9dc8d875bd9095981abb30626eafeb57)
运行上述程序,删除压缩包中的“吉林”文件夹,如图3-12所示。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/010.jpg?sign=1739937643-s3LXkWT5ERD8kyBchJPghjsmmyx7ycC7-0-39985937ddb49b9779066da216444989)
图3-12 删除压缩包中指定的文件夹
3.1.6 使用通配符
无论是压缩、解压缩,还是删除命令,路径设置中均可使用通配符。*表示0个以上任意字符,?表示1个任意字符。
下面的程序把文件夹下所有4位扩展名的Word文档添加到Word.rar压缩包中。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/013.jpg?sign=1739937643-K1Q9c705sjayvd0r0vaXpufbETNmZGAF-0-f9f161ae879d687c9d4e0c56e1c70b19)
运行上述程序,将文件夹中所有的Word文档添加到压缩包,如图3-13所示。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/012.jpg?sign=1739937643-fCgBmEPPI2MnV077d6IQ99qsgGk5LE7t-0-f2edf7a30d919352ddf72fb18234a3ad)
图3-13 批量压缩特定类型的文件
下面的代码从Word.rar压缩包中删除启用宏的Word文档(扩展名为.docm)。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/014.jpg?sign=1739937643-bzZuJHMlEWApx1y2Jr2g8lXRqASGfhKo-0-a82fa509dfa61a785cc0830fbe02284f)
需要注意的是,由于是从压缩包里面删除内容,所以代码中Content的赋值不需要WorkDir。
运行上述程序,删除压缩包中扩展名为docm的文件,如图3-14所示。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/015.jpg?sign=1739937643-PgPXGzNfFIFftRZgc4PavNruEqADOGWr-0-f02092aa357eaf6d4a5367474d428038)
图3-14 从压缩包中删除指定扩展名的文件
3.1.7 处理压缩包的密码
使用-p或-hp开关参数,可以压缩为加密的文件,也可以从添加了密码的压缩包中解压文件。-p后面带上密码,表示普通加密,手工双击压缩包,会看到压缩包中的文件列表,每个文件后面有*。
下面的程序把文件夹中所有扩展名为.pdf的文件添加到压缩包,并且设置解压密码为ryueifu。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/017.jpg?sign=1739937643-38VK4jtSjjjG8eQtX63j40QHkvHQGd3I-0-a1596d0763a42b779b39a824e4552a35)
运行上述程序,然后打开压缩包,会看到处于加密状态,如图3-15所示。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/016.jpg?sign=1739937643-ft4JjL6I5eIwjnJuqdPNEdCblObgdcMJ-0-bce461ab7f5fd486f86369be85b250a1)
图3-15 自动压缩并设置解压密码
如果使用开关参数-hp,表示高度加密,这种方式生成的压缩包,连其中的文件列表也看不到,如图3-16所示。
对于设置了密码的压缩包,可以在解压命令中把密码传递进去。
下面的程序把刚刚加密生成的Lock.rar解压到test文件夹中。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/019.jpg?sign=1739937643-meFpIkwdOM2PhFKmq44SAAn46v2I9Qeh-0-539f3fa6fb6e2ed63169dce488760322)
图3-16 使用-hp参数高度加密
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/020.jpg?sign=1739937643-bUdiCWkdiIoEZHt4HFOUPebyLqVGtMC4-0-9e22eea595bf26769a10c6ad8d467f6f)
3.1.8 使用WinRAR修改Office文档
Office 2007以上版本的Office文档(.docx、.xlsx、.pptx等格式)其实是一种压缩包格式,使用WinRAR可以直接打开。下面介绍一下用WinRAR查看和修改Excel文件的方法。
实例文件“example01.xlsx”有3个工作表,表名从左到右依次分别为Jan、Feb、Mar,如图3-17所示。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/018.jpg?sign=1739937643-XaNDKPP6bxBaL3sSruWmcscndLZPvjsK-0-d4d4d17a9d229bf16c4e102fa58df099)
图3-17 Excel工作簿文件
在Excel中关闭该文件,然后打开WinRAR软件,按下快捷键【Ctrl+O】,浏览到example01.xlsx,如图3-18所示。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/021.jpg?sign=1739937643-aGxYC66JJ0GrZnn4AJDV52oxYbQIizDq-0-cd0dae391926282e01ee97f91a9819ac)
图3-18 使用WinRAR打开Excel文件
在WinRAR中看到Excel文件由3个文件夹和一个文件构成,继续展开名为xl的文件夹,可以看到和工作表信息有关的内容,如图3-19所示。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/022.jpg?sign=1739937643-JmRGmkP37PWWBzp6weYbP4kSjj6ZSI00-0-6efd053c60c9eb8394331f6ef6767f27)
图3-19 查看Excel文件的内容
手工把example01.xlsx解压到磁盘下,生成了一些扩展名为.xml的文件。双击Workbook.xml,会在IE浏览器中打开该文件,如图3-20所示。
其中<Sheets>这个节点中存储的就是各个工作表的名称和顺序。
xml文件可以用记事本程序编辑,因此接下来用记事本程序打开Workbook.xml文件,把Jan这个工作表移动到最后,并且把Feb这个表的名称修改为“二月”。修改好后,在IE中再次预览,如图3-21所示。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/023.jpg?sign=1739937643-FEVnaNyKPKl3BV0O7qUdNPcsNmW6Wthl-0-c4b97c683a04ed40a3e17e1488fcb991)
图3-20 查看Excel文件内部的部署清单
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/024.jpg?sign=1739937643-gTmN63EzMHPR1W1wDPreCE5NdtzpuLVv-0-8269f1e5f123aa68ad2aae9c0f16072b)
图3-21 调整工作表的XML代码
然后把修改了的Workbook.xml文件压入example01.xlsx工作簿中,在Excel中再次打开,看到工作表的名称和次序发生了变化,如图3-22所示。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/025.jpg?sign=1739937643-ltlZYYSe6ZOGiqiYXCi5wtfiOQPMOycZ-0-1400797e0434172c76d5a0e7c15f33c9)
图3-22 修改后Excel文件的内容
可以看到Jan工作表移到了最后,Feb工作表被重命名。
Word、PowerPoint文档也是压缩文件,可以用WinRAR查看和打开。以上演示的是手工使用WinRAR查看、修改Office文档,当然也可以用Shell调用WinRAR进行自动解压。
下面的过程把example01.xlsx文件中的Workbook.xml部分解压到Destination文件夹中。
![](https://epubservercos.yuewen.com/F986E7/15056702504171006/epubprivate/OEBPS/Images/027.jpg?sign=1739937643-ekkAVPNlD3AAtyT1DUYYYG0u7KrunS9J-0-b01d4ef741045e6b8c3cd0e4d9bd4060)
如果是带有自定义功能区的文档,用压缩包打开后,里面有更多的内容,这些在稍后的章节讲解。
以上内容的源代码文件为“实例文档10.xlsm”。