- Office VBA開發經典:中級進階卷
- 劉永富 劉行
- 2956字
- 2019-11-22 18:29:09
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所示。

圖3-1 “壓縮文件名和參數”對話框

圖3-2 勾選關聯的擴展名
3.1.1 獲取WinRAR可執行文件路徑
WinRAR的執行文件一般情況下位于C:\Program Files\WinRAR\WinRAR.exe,如果個別計算機把這個軟件安裝到其他位置,使用前面講過的WshShell對象的RegRead方法讀取注冊表可以獲取其路徑。
下面的GetSetupPath函數用來獲取指定程序名的安裝路徑。

運行下面的過程,可以獲取WinRAR軟件的安裝路徑以及PowerPoint的安裝路徑。

上述程序的運行結果如圖3-3所示。

圖3-3 從注冊表中獲取應用程序的所在路徑
3.1.2 命令和開關
獲取到WinRAR.exe的所在路徑,就可以使用Shell函數調用這個可執行文件完成壓縮和解壓縮操作。
調用格式如下。
Shell "WinRAR.exe的路徑 命令 開關 壓縮包路徑 文件路徑",vbNormalFocus(或者vbHide)
下面通過一個實例來介紹一下各參數的構造方法。

以上語句的功能是,調用WinRAR.exe把65.png圖片文件壓縮到Regdll.rar這個壓縮包中??梢钥闯龈鱾€參數之間用空格隔開,全部放入雙引號內,形成了一個長的字符串。其中的A就是一個命令,表示壓縮,上面這個實例沒有用到開關參數。
下面分別介紹一下WinRAR的命令參數和開關參數。命令參數的功能是告知WinRAR要執行什么操作,是壓縮、解壓縮還是刪除。開關參數是對命令參數的補充說明。
WinRAR命令參數
單擊WinRAR的菜單【幫助/幫助主題】,可以打開其幫助文件,依次展開節點“命令行模式/命令行”,可以看到所有命令參數的說明,如圖3-4所示。

圖3-4 WinRAR的命令參數幫助
最常用的4個命令參數及其功能如下。
A:壓縮,添加到壓縮文件中。
D:刪除,從壓縮包中刪除文件。
E:解壓縮到當前目錄。
X:以完全路徑解壓。
可以看出,從壓縮包中解壓出內容,有E和X兩個命令參數。其實,E命令參數等價于WinRAR解壓參數中的“不要提取路徑”;X命令參數等價于“提取完整路徑”,使用WinRAR軟件解壓一個壓縮包時,在“高級”選項卡里可以看到解壓方式選項,如圖3-5所示。

圖3-5 命令參數相應的含義
簡言之,E就是忽略壓縮包中的路徑,釋放所有文件到目標文件夾,而X則按照壓縮包原有的路徑結構釋放到目標文件夾。
WinRAR開關參數
在WinRAR軟件的幫助文件中,依次展開節點“命令行模式/參數”,可以看到所有開關參數的說明,如圖3-6所示。
下面是比較常用的開關參數。
-ep:忽略路徑。
-ep1:忽略基準路徑,但保持現有文件層次結構。
-p或-hp:壓縮時加密碼。
-df:壓縮后刪除原文件。
-dr:壓縮后刪除原文件到回收站。
大致了解命令參數和開關參數后,下面通過具體實例加深學習。

圖3-6 WinRAR開關參數幫助
3.1.3 壓縮
假設文件夾“東北三省”中的內容如圖3-7所示。

圖3-7 文件夾內容的示意圖
如果采用命令A-ep則是忽略所有路徑,也就是忽略文件夾及其子文件夾,把“東北三省”下面管轄的所有文件(含遞歸)壓縮進去。完整代碼如下。

代碼分析:函數GetSetupPath用來獲取WinRAR軟件的安裝目錄,函數AddQuote用來處理Shell命令路徑中的空格。要注意Command中要保留必要的空格。
以上代碼段中,最重要的一句就是最后Shell函數的應用。
運行上面的“文件夾及其內容添加到壓縮包”過程,會在E:盤下生成package1.rar壓縮包,手工打開后,如圖3-8所示。

圖3-8 自動執行壓縮
可以看到,A-ep命令把文件夾中所有的“文件”掏出來,放入壓縮包,而不管這些文件原先在何處。
現在只需把上述代碼中的Command換成"A-ep1",刪除原先的壓縮包,再運行一次程序,效果如圖3-9所示。

圖3-9 連文件夾一起壓縮
可以看出,該命令保留了原先文件結構。因此,可以簡單地理解為-ep參數只壓縮文件,-ep1帶文件夾壓縮。
在實際應用中,根據需要選擇開關參數即可。
3.1.4 解壓縮
解壓縮是將壓縮包中的內容釋放到磁盤下的操作。解壓縮的命令有E和X。
下面的過程把壓縮包package1.rar中所有的文件解壓到Destination文件夾下。

運行上述程序,把壓縮包中的文件直接釋放到目標文件夾,如圖3-10所示。
如果把Command改為Command = " X ",再次運行上述程序,壓縮包中的文件夾和文件一律解壓到目標文件夾中,如圖3-11所示。
上面的實例把壓縮包中所有內容解壓到目標文件夾,使用以下代碼可以解壓壓縮包中指定路徑的文件,而不是解壓全部文件。


圖3-10 自動解壓

圖3-11 連文件夾一起解壓
3.1.5 刪除
WinRAR使用命令D刪除壓縮包中的文件或路徑。
下面的實例把package1.rar壓縮包中的“吉林”文件夾刪除。

運行上述程序,刪除壓縮包中的“吉林”文件夾,如圖3-12所示。

圖3-12 刪除壓縮包中指定的文件夾
3.1.6 使用通配符
無論是壓縮、解壓縮,還是刪除命令,路徑設置中均可使用通配符。*表示0個以上任意字符,?表示1個任意字符。
下面的程序把文件夾下所有4位擴展名的Word文檔添加到Word.rar壓縮包中。

運行上述程序,將文件夾中所有的Word文檔添加到壓縮包,如圖3-13所示。

圖3-13 批量壓縮特定類型的文件
下面的代碼從Word.rar壓縮包中刪除啟用宏的Word文檔(擴展名為.docm)。

需要注意的是,由于是從壓縮包里面刪除內容,所以代碼中Content的賦值不需要WorkDir。
運行上述程序,刪除壓縮包中擴展名為docm的文件,如圖3-14所示。

圖3-14 從壓縮包中刪除指定擴展名的文件
3.1.7 處理壓縮包的密碼
使用-p或-hp開關參數,可以壓縮為加密的文件,也可以從添加了密碼的壓縮包中解壓文件。-p后面帶上密碼,表示普通加密,手工雙擊壓縮包,會看到壓縮包中的文件列表,每個文件后面有*。
下面的程序把文件夾中所有擴展名為.pdf的文件添加到壓縮包,并且設置解壓密碼為ryueifu。

運行上述程序,然后打開壓縮包,會看到處于加密狀態,如圖3-15所示。

圖3-15 自動壓縮并設置解壓密碼
如果使用開關參數-hp,表示高度加密,這種方式生成的壓縮包,連其中的文件列表也看不到,如圖3-16所示。
對于設置了密碼的壓縮包,可以在解壓命令中把密碼傳遞進去。
下面的程序把剛剛加密生成的Lock.rar解壓到test文件夾中。

圖3-16 使用-hp參數高度加密

3.1.8 使用WinRAR修改Office文檔
Office 2007以上版本的Office文檔(.docx、.xlsx、.pptx等格式)其實是一種壓縮包格式,使用WinRAR可以直接打開。下面介紹一下用WinRAR查看和修改Excel文件的方法。
實例文件“example01.xlsx”有3個工作表,表名從左到右依次分別為Jan、Feb、Mar,如圖3-17所示。

圖3-17 Excel工作簿文件
在Excel中關閉該文件,然后打開WinRAR軟件,按下快捷鍵【Ctrl+O】,瀏覽到example01.xlsx,如圖3-18所示。

圖3-18 使用WinRAR打開Excel文件
在WinRAR中看到Excel文件由3個文件夾和一個文件構成,繼續展開名為xl的文件夾,可以看到和工作表信息有關的內容,如圖3-19所示。

圖3-19 查看Excel文件的內容
手工把example01.xlsx解壓到磁盤下,生成了一些擴展名為.xml的文件。雙擊Workbook.xml,會在IE瀏覽器中打開該文件,如圖3-20所示。
其中<Sheets>這個節點中存儲的就是各個工作表的名稱和順序。
xml文件可以用記事本程序編輯,因此接下來用記事本程序打開Workbook.xml文件,把Jan這個工作表移動到最后,并且把Feb這個表的名稱修改為“二月”。修改好后,在IE中再次預覽,如圖3-21所示。

圖3-20 查看Excel文件內部的部署清單

圖3-21 調整工作表的XML代碼
然后把修改了的Workbook.xml文件壓入example01.xlsx工作簿中,在Excel中再次打開,看到工作表的名稱和次序發生了變化,如圖3-22所示。

圖3-22 修改后Excel文件的內容
可以看到Jan工作表移到了最后,Feb工作表被重命名。
Word、PowerPoint文檔也是壓縮文件,可以用WinRAR查看和打開。以上演示的是手工使用WinRAR查看、修改Office文檔,當然也可以用Shell調用WinRAR進行自動解壓。
下面的過程把example01.xlsx文件中的Workbook.xml部分解壓到Destination文件夾中。

如果是帶有自定義功能區的文檔,用壓縮包打開后,里面有更多的內容,這些在稍后的章節講解。
以上內容的源代碼文件為“實例文檔10.xlsm”。