お仕事でExcelファイルを使うことが多いのですが、少しハマったところがあったのでブログにも記しておきます。
比較的新しいExcelファイルの拡張子は「.xlsx」だと思いますが、Excel2003以前くらいだと「.xls」という拡張子になっています。
昔から脈々と受け継がれてきたファイルだと、未だに拡張子がこの「.xls」だったりします。
この古いExcelファイルが曲者で、何も編集もせず、保存もせず、ただ開いて閉じただけで、バイナリ情報が変わってしまうんですね。
.xls拡張子のExcelファイルは開くとバイナリ情報が変わる
どういうことか、実際に例を示してみましょう。
▼拡張子「.xls」の古いExcelファイル「Book1.xls」があります。
▼このファイルをコピーして「Book1 – コピー.xls」を作成しました。ファイル名が違うだけで、当然中身は同じです。
▼ファイル比較ツール「WinMerge」を使って2つのファイルをバイナリ比較すると、同一ファイル(差異なし)という結果になります。
まあここまでは当然ですね。コピーしただけですから。
想定外だったのはここからです。
▼「Book1.xls」を開きます。で、何もせずに閉じます。ファイルの更新・保存ももちろんしません。
何も更新してないんだから、ファイルは何も変わっていないと思いますよね。
再びWinMergeでファイルを比較してみましょう。
▼ファイルを開いて閉じただけなのに、バイナリ情報に差異ありという結果になりました。
これはどうやら古いバージョンのExcelの仕様らしいです。
この仕様に気づかず、なぜ同じファイルなのに差異があるんだ!?ってかなり悩みました。
一度開いてしまったxlsファイルの同一性を確認するには
この仕様のせいで、古いExcelファイルを一度開いてしまうとバイナリレベルでは差異が生じてしまい、ファイルの同一性が確認できません。
ではどうすれば良いのでしょうか。
この問題については、今回使用したファイル比較ツール「WinMerge」のExcel比較機能で対処できます。
バイナリ情報ではなく、セルの値や見た目などを比較してファイルが同一か確認できます。
詳細は下記記事にまとめているので参考にしてください。
WinMergeはテキストだけじゃなくExcelの差分比較もできる神機能があった!もちろん無料!
新しいExcelファイル(.xlsx)ではこの事象は起きない
ちなみに、Excel2007以降で標準となった拡張子「.xlsx」のファイルではこの事象は発生しません。
ファイルを開いただけでバイナリ情報が変わることはありません。
まとめ
というわけで、古い拡張子「.xls」のExcelファイルは開くだけでバイナリ情報が変わってしまうよ!というお話でした。
家庭でこのようなExcelファイルの比較作業をすることはないでしょうが、仕事だと結構あったりします。
知らないとハマってしまうと思うので、皆さん気をつけましょうね。
っていうか、できるなら古いxlsファイルはxlsxに変換していきましょう。ファイルサイズも小さくなりますしね。
<関連記事>
WinMergeはテキストだけじゃなくExcelの差分比較もできる神機能があった!もちろん無料!