
EditPlus の正規表現の変更/置換機能を使用して、次の正規表現を使用して、スプレッドシートの sheet6.xml ファイル内の数式の範囲を変更しました。
探す:(SUM\(J.*:)(S)(.*\))
交換する:\1\N\31
たとえば、スプレッドシートに列 N を超えるデータが含まれていないため、SUM(J1024:S1024)
の出現が に正しく変更されます。SUM(J1024:N1024)
次に、calcChain.xml
すべてを削除して新しい XLSM ファイルに圧縮します。Excel でファイルを読み込むと、ファイルにエラーが含まれているため [OK] をクリックすると Excel がファイルの修復を試みることを示すメッセージ ボックスが表示されます。[OK] をクリックすると、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 を大幅に変更し、比較を非常に困難にしました。