« 「任天堂の岩田社長が遊びに来たので、みんなでご飯を食べながら話を聞いたのだ」をじっくり読んだのだ | メイン | 配列がわかったらプログラミングできた記憶がある »

Office 2007のファイル形式「xlsx」の正体はzip

iioka@lzhかzipかで言ったらzip派
です。

手前味噌で申し訳ないのですが、
EnterpriseZineのこちらの記事を読んでて、「あ、そうなんだ」と思った。
本格的なフロントエンドツールとして一段と進化したExcel 2007の実力 Part1

これまでのOfficeの文書ファイルは「.xls」(Excelの場合)などの拡張子を持っていたが、これが拡張子「.xlsx」(Excel 2007の場合)などに変更された。Office 2007の文書ファイルは、数多くのXMLファイルやバイナリファイルをZIP形式で圧縮して1つにまとめられたもので、実際に拡張子を「.zip」に変更すれば、その中身は複数のファイルで構成されていることが確認できる。

xlsxファイルの正体はzip!


早速試してみました。

まずは適当なファイルを作って保存します。

Excel200701.gif


xlsxファイルの拡張子を「zip」に変え、解凍してみたら、簡単にできた。

Excel200702.gif


シート情報は「xl/worksheets」の中にXMLファイルがあり、
そこに保持されているのですが、
面白いなぁと思ったのが、セル内の文字列情報が、ここにはないという点。
こちらのファイルはあくまで、
セルの大きさとか、アクティブセルの位置とか、マッピング情報とか、
そういう設定系の情報が載ってます。

じゃあ、文字列はどこにあるかというと、
xlフォルダ内にある「sharedStrings.xml」というファイルの中にあります。
Excel200703.gif


そして、「sheet1.xml」と「sharedStrings.xml」のマッピングが面白い。
sheet1.xmlには、なんらかの加工がなされているセル情報が列挙されてますが、
セルが文字列を含む場合、sharedStrings.xmlの何番目の子要素かという
出現順番によるマッピングをしています。


先入観で「IDを割り振ってマッピングしているんだろう」と思ってたので、
なんとなく貧弱に思えてしまうマッピング手法に驚いた。

でも、大量のデータを取り扱うんだから、
わざわざIDを割り振るのも合理的じゃないですし、
「ああ、これがベストプラクティスになるんだな」と感心しました。

データの持ち方って勉強になりますね。



ところでOffice 2007のファイル形式は、旧Office群と互換性がなかったりします。
一応、MSから互換パッチが出ていて、これを利用すればコンバートしてくれます。
ただ、入れてみるとわかるのですが、コンバートスピードがちょっと遅いです…。
(が、バージョンアップを繰り返すごとに確実に早くなってるのが素晴らしい)

というより、このパッチの存在を知らない人も多い方が大問題。

なので、自分はOffice 2007を仕事で使っているのですが、
Excelファイルを誰かに送ることを考えて、いつもxls形式で保存しています。
これがまぁね、面倒っちゃ面倒。

早くOffice 2007が普及しないかなー。
もしくはWindows Updateあたりを通じて、互換パッチをみんなにインストールしてくれないかなー。


実際、Office 2007はいい製品だと思うんです。
慣れると使いやすいし、処理は速いし、大量データをさばけるし。
ただ、これだけ普及してしまった製品のファイル形式を変えるってのは、
想像していた以上におおごとなんだな、と最近思ってます。
スポンサーサイト