我使用 EditPlus 的正则表达式更改/替换功能修改了电子表格的 sheet6.xml 文件中公式的范围,使用以下正则表达式:
寻找:(SUM\(J.*:)(S)(.*\))
代替:\1\N\31
例如,它正确地将 更改为SUM(J1024:S1024)
,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 记录它?我确实尝试从“已修复”文件中提取 XML 并将其与我的更改生成的 XML 进行比较,但这被证明是非常具有挑战性的,因为 Excel 还借此机会用共享公式 ( <f t="shared" ...>
) 替换了许多冗余公式,从而显著改变了原始 XML 并使比较变得非常困难。