
我使用 EditPlus 的正規表示式更改/替換功能修改了電子表格的sheet6.xml 檔案中的公式範圍,使用以下正規表示式:
尋找:(SUM\(J.*:)(S)(.*\))
代替:\1\N\31
例如,它正確地更改了SUM(J1024:S1024)
to的出現SUM(J1024:N1024)
,因為電子表格不包含超出第 N 列的資料。
然後,我刪除calcChain.xml
所有內容並將其壓縮到新的 XLSM 檔案中。當我在 Excel 中加載該文件時,會彈出一個訊息框,指出該文件包含錯誤,如果單擊“確定”,Excel 將嘗試修復該文件。點選「確定」後,Excel 會顯示:
Excel 能夠透過修復或刪除無法讀取的內容來開啟該檔案。
刪除的記錄:/xl/worksheets/sheet6.xml 部分中的公式
按一下查看列出修復的日誌檔案:(blah, blah blah) \error123720_01.xml。
error123720_01.xml的內容是:
<?xml version="1.0" standalone="yes"?>
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<logFileName>error123720_01.xml</logFileName>
<summary>Errors were detected in file 'C:\Users\mbmas_000\Directory Junctions\Documents - Local\Estate Accounting-2016-05-19.Mod2.xlsm'</summary>
<removedRecords>
<removedRecord>Removed Records: Formula from /xl/worksheets/sheet6.xml part</removedRecord>
</removedRecords>
</recoveryLog>
因此,正如您所看到的,“詳細信息”文件根本不包含任何詳細信息,並且不會添加比原始對話框顯示的更多信息。
一旦由 Excel 打開並顯示,電子表格本身看起來就很好。我修改後的公式就在那裡。一切看起來都很好;然而,這是一個巨大的電子表格,誰知道其中是否潛伏著一些錯誤。
我真的很想知道 Excel 在執行此“修復”時做了什麼。這是在任何地方記錄的嗎?如果Excel沒有被記錄,有沒有辦法讓Excel記錄它?我確實嘗試從「已修復」文件中提取 XML 並將其與我的更改生成的 XML 進行比較,但這被證明非常具有挑戰性,因為 Excel 還藉此機會用共享公式替換了許多冗餘公式 ( <f t="shared" ...>
),顯著改變了原始 XML 並使比較變得非常困難。