■ 河北 李云飛
編者按:在工作中,Office辦公軟件是必備之物,但有時也免不了某些軟件出現問題,導致工作效率受到制約,本文講解一些Word文件的修復方法。
Office 2007之后的Word文檔格式都采用了Open XML的文檔格式,Open XML格式上使用了標準的ZIP算法對文件內部數據進行了壓縮處理,可以通過ZIP解壓軟件對其進行解壓操作。
現在大多數的Word文件都是docx格式的,在工作中也經常會遇到docx文件的損壞,當docx文件由于各種原因(例如藍屏等)損壞后,可以通過Office的自動備份來找回,如果沒有備份就只有通過修復文件來找回數據了。
標準zip文件格式由三部分組成:zip壓縮數據段、中央目錄區、中央目錄區尾部。
其中zip壓縮數據段又分為zip文件頭信息和壓縮數據。如圖1、2、3所示。表格中帶☆的是在文件修復中經常用到的。

圖1 ZIP壓縮文件頭結構

圖2 中央目錄區文件頭結構
利用ZIP解壓軟件對docx文檔解壓之后,發現很多文件夾和XML文件。其中,“[Content_Types].xml”定義了各部分的內容類型,“\_rals.rels”定義了部件之間的關聯關系,“/docProps”中是一些文檔的屬性信息,“/word”目錄里面存放著文檔的所有信息, “header.xml”和“footer.xml”存放著頁眉頁腳信息,“/word/image”中存放著Word中的嵌入的圖片信息,“/word/document.xml”存放著Word中的文本信息。
當docx文件損壞之后可以通過WinHex提取document.xml文件來恢復docx中的文本信息。
通過WinHex中的搜索功能搜索關鍵字/Word/document.xml,找到該文件的起始位置,ZIP壓縮數據段的總長度L=30+壓縮后的大小+文件名的長度+擴展區的大小,通過圖1可以算出ZIP壓縮數據段的總長度。
選中document.xml的壓縮數據段復制到WinHex新建文件中。document.xml對應的中央目錄區數據可以通過WinHex搜索/Word/document.xml得到,中央目錄區是以0x02014B50開始的,由于數據存儲模式是Little-Endian模式,所以顯示504B0102,如圖4所示。
中央目錄尾區可以通過WinHex搜索0x06054B50找到,由于數據存儲模式是Little-Endian模式,所以這里用WinHex搜索十六進制的504B0506,中央目錄區尾位于文件的最后,所以直接把WinHex拉到最后找就可以看到了,如圖5所示。
最后,把找到的document.xml的中央目錄區數據和最后的中央目錄區尾部數據依次復制到壓縮數據段后面。

圖3 中央目錄區尾部結構

圖4 Little-Endian模式下顯示504B0102

圖5 中央目錄尾區顯示
由于中央目錄、中央目錄尾復制到了WinHex新建文件中,里面對應的一些數值發生了變化,只有修改正確了才能把把document.xml正常解壓出來。
因為當document.xml的壓縮數據復制到WinHex新建文件中的時候相對位移就變成了0。所以要修改表2中央目錄區偏移量42中的局部文件相對位移的值為0x0000,圖3中央目錄區尾部偏移量8的核心目錄數量改為1,偏移量10的核心目錄的結構總數改為1,偏移量12的核心目錄大小改為63(0x3F),偏移量16核心目錄開始位置改為0x532C,可以通過WinHex中的偏移量得到核心目錄開始位置是0x532C。
修改完中央目錄區和中央目錄區尾的數據后就可以把文件另存為ZIP格式,然后正常解壓出document.xml文件。
document.xml文件直接打開數據顯示的不是很直觀,可以通過新建一個docx文件然后替換document.xml,替換后打開docx文件會很直觀的顯示出恢復的文本數據。
通過WinHex手動提取文本費時費力,一般Word文件修復可以通過一些現成的軟件來修復的,例如EasyRecovery、OfficeFIX等。
OfficeFIX可以修復Word、Excel、PPT等一些文件,使用也很簡便,首先選擇要修復的文件類型,然后選擇要修復的文件,最后點擊Recover進行修復。雖然工具修復效率比較高,但是有些時候利用工具修復的效果不是很理想,這時就要通過WinHex手動修復文件了。