Microsoftの公式サイトでは、新しいExcel 2007で採用されたファイル形式(xlsx)は、従来のファイル形式(xls)に比べてファイルサイズが小さくなると書かれています。
■Microsoft Office Excel 2007 の 10 個の主な利点9 スプレッドシートのサイズを削減すると同時に破損ファイルの回復機能を強化する。
新しい圧縮された Microsoft Office Excel XML 形式により、ファイル サイズが大幅に削減される一方、破損ファイルのデータ回復機能が強化されました。この新しい形式では、必要な記憶域と帯域幅が大幅に減少し、IT 担当者の負担が軽減されます。
http://office.microsoft.com/ja-jp/excel/HA101641791041.aspx
ハードディスク容量が数10GB~数100GBで当たり前の現在でも、ファイルのサイズが小さくなることはうれしいです。いったい、どれくらい小さくなるのでしょうか。あるいは、本当に小さくなるのでしょうか・・・。
まず、Excel 2003とExcel 2007で空のブックを比較してみます。
ファイル名 | サイズ | 縮小率 | |
---|---|---|---|
Excel 2003(xls) | Book1.xls | 13,824 byte | - |
Excel 2007(xlsx) | Book1.xlsx | 8,006 byte | 57.91% |
なるほど、小さくなりますね。では適当にデータを入力してみましょう。下図のようなブックをそれぞれ作成してBook2として保存します。文字、数値、計算式などを入力し、書式を設定したり、グラフを作ったりしてみました。
ファイル名 | サイズ | 縮小率 | |
---|---|---|---|
Excel 2003(xls) | Book2.xls | 16,384 byte | - |
Excel 2007(xlsx) | Book2.xlsx | 12,510 byte | 76.35% |
一応小さくなりましたね。これは別の機会に詳しく書きますが、Excel 2007の新ファイル形式(xlsx)では、グラフがあるとファイルサイズは大きくなります。それにしても、まだ2割以上の縮小率ですね。
では、そろそろ意地悪な実験をしてみましょう。
新規ブックに何も入力せず、その代わり100行×100列に黄色の塗りつぶし書式を設定します。
ファイル名 | サイズ | 縮小率 | |
---|---|---|---|
Excel 2003(xls) | Book3.xls | 35,840 byte | - |
Excel 2007(xlsx) | Book3.xlsx | 30,371 byte | 84.74% |
あまり差が出なくなりましたね。では同じように、今度は新規ブックに1000行×100列に黄色の塗りつぶし書式を設定してみます。
ファイル名 | サイズ | 縮小率 | |
---|---|---|---|
Excel 2003(xls) | Book4.xls | 246,272 byte | - |
Excel 2007(xlsx) | Book4.xlsx | 265,127 byte | 107.66% |
おや、逆にファイルサイズが大きくなってしまいました。
詳しく調べていませんが、何となく原因は想像できます。従来のファイル形式はBIFFと呼ばれるバイナリ形式でした。あるセルに塗りつぶし色が設定されているかどうかなどの情報は数バイト~数10バイト程度で記録されていたと思います。対して新しいExcel 2007のファイル形式はXMLをZIP圧縮しています。XMLはHTMLのようなテキスト形式です。セルに塗りつぶしが設定されているか、罫線が引かれているか、高さは?幅は?などの情報は、基本的にテキスト形式で記録されます。どちらの容量が大きいかは想像できますよね。ZIP圧縮してもまだ、テキスト形式による記録の方が上回ったのでしょう。
もうひとつ、逆にファイルサイズが大きくなるケースをご紹介します。
新規ブックに約2.4MBのBMP画像を挿入します。Excel 2003は[挿入]-[図]-[ファイルから]コマンド、Excel 2007ではリボンの[挿入]タブ[図]グループの[図]ボタンをクリックしました。
ファイル名 | サイズ | 縮小率 | |
---|---|---|---|
Excel 2003(xls) | Book5.xls | 1,718,272 byte | - |
Excel 2007(xlsx) | Book5.xlsx | 2,217,044 byte | 129.03% |
またもや、新ファイル形式(xlsx)の方が大きくなりました。
その原因は、画像データを保存する方法の違いによるものです。従来のファイル形式(xls)では、ワークシートに画像が挿入されると、その画像データをExcelが独自に圧縮して、ブック内に保存しました。圧縮の形式などは公表されていませんが、どうやらJPG形式に近いようです。ですから、上記の実験で「Book5.xls」は、約2.4MBの画像を挿入したにもかかわらず、ブックのサイズは1.7MB程度になるのです。
一方、新しいExcel 2007形式(xlsx)は、基本的に画像をそのまま(圧縮せずに)保存します。上記の「Book5.xlsx」の実体はZIPファイルですから、その中を確認してみると次のように保存されているのが確認できます。
ワークシートに挿入したBMPファイルは、PNG形式に変換されて保存されています。ベータ版では、ファイルの中身はそのままで拡張子だけPNGに変換していましたが、製品版で確認したところ、ファイル内にはPNGのヘッダーが記述されているようです。ただ、私は画像フォーマットに関しては専門外なので、実際にはどのような処理がなされているかはわかりません。一応、画像閲覧・編集ソフトなどでは正常なPNGファイルと認識されるようです。
この変換されたPNGファイルは、ZIP圧縮してもほとんどファイルサイズが小さくなりません。圧縮技術に詳しくありませんが、何度か実験した結果です。いろいろとZIPの圧縮率を変えてみましたが、どれも結果は似たようなものでした。
実際にはさまざまなケースが想定されますので一概に断言はできませんが、とりあえず今回の検証でわかったのは次の2点です。
・膨大なセルに書式を設定すると、ファイルサイズは逆に大きくなる場合がある
・ワークシートにBMP形式の画像を挿入すると、ファイルサイズは逆に大きくなる場合がある
新しいファイル形式(xlsx)については、またあらためて検証するつもりです。