昨天下班前,在關閉了辛辛苦苦編輯了一天的Excel 2007格式(.xlsx)文檔時,心中掠過一絲陰影,重新打開文檔,出現了下面的錯誤:
選擇“是”進行恢復,又出現了下面的錯誤提示,並且所有文字內容全部丟失了。
接下來試了一些方法,沒有成功,在網上搜索到了相似的案例,這可能還真是excel 2007的一個BUG,而且所有文章都沒有給出解決方法,看來文件恢復的希望是沒有了。
說說我都做了什麼吧:
1)確認了自己使用的確實是.xlsx文檔格式,從網上搜索的結果看是Microsoft的專有格式
2)Excel提供的修復方法僅僅是其程序自帶的“內容恢復”
3)從網上查到了一篇文檔,介紹了.xlsx文檔的格式,知道了它其實是zip壓縮了的xml文件集合
4)解壓後查看 xl/sharedStrings.xml 文件內容,發現自己編寫的內容還在。
5)直接用瀏覽器打開 xl/sharedStrings.xml 發現了這樣的錯誤提示:
6)意識到可能是<si></si>匹配對有缺失,通過對xl/sharedStrings.xml文件中的<si>和</si>分別進行文本查找,發現2者的數量相差1,</si>少了一個。
7)通過正則表達式替換、過濾得到下面結果,找到了</si>缺失的位置:
8)到xl/sharedStrings.xml文件中,找到缺少</si>的<si>,手工補齊</si>。
9)用瀏覽器打開xl/sharedStrings.xml,不再提示錯誤。
10)把.xlsx的擴展名改爲.zip,用Windows資源管理器打開,用修改後的xl/sharedStrings.xml替換舊文件,再把擴展名改回.xlsx。
11)再用excel 2007打開,所有數據恢復了。
---總結---
我遇到的這個錯誤的本質原因是xl/sharedStrings.xml文件中有不完整的<si></si>匹配對。其他朋友遇到相同的錯誤,不一定是與我相同的原因造成的。但找到問題原因的思路可以借鑑。希望這篇文檔能夠對大家有所幫助。
附:我現在改用openOffice編輯重要文檔。