現象
\修復されたレコード: /xl/sharedStrings.xml パーツ内の文字列プロパティ (文字列)
特に今回このShareStringについて、修復が成功したケースを記録する。
これは調べると文字化けしているrしいことがわかった。。
そこでいくら修復してもUTF-8にならないだけで、データに損失はなく、エクセルが強制的に文字コードを書き換えて表示するものの、保存するときにまた文字化けてしてしまうのではないかと推測された。
発見された解決方法
ファイルをコピーしてバックアップ(基本)
コピーしたファイルをTmpフォルダなどを作り、そこに移動
zipファイルにしてばらす。
壊れているxmlファイルは文字化けしていた。
ここでまずxlsxファイルをxmlファイルで保存する。
これをexcelで開きなおす。
これを再びxlsxで保存する。
Zip化して開き、sharedStrings.xmlを開き、文字化けが治っていることを確認する。
ファイルを比較して問題がない場合はこちらを使用する。
発生した原因
文字コードがutf-8であるところをShift-jisで読んでいるような状態だと思われる。Excelの修復はそうしたところまでは修復できず、文字コードを変えて表示しているらしい。
そもそもファイル自体が破損しているならば、zipで開く時点でもエラーがありうる。開けているのはファイル自体が破壊されたわけではないらしい。
xmlに出力することで文字コードとの不一致が解消し、エラーが起きなくなるということのようだ。
SharedString
これは複数のシートのデータが入っているようなxmlで、Excelのテキストで表示されているシート名やセルの内容全体を持っているらしい。
逆にバイナリ的な内容ではないため、こうした文字コードが一致するような修復方法が有効なときもあると考えられる。
今後も検証
最もこの修復になる原因は一つではないため、絶対的な方法ではないが、今までなぜ起きるのかもわかっていなかったので貴重な発見となった。
開くたびに修復されるファイルというのはしばしば発生するので、この方法が有効な解決方法となるか、今後検証していく