少しエクセルで資料を作っていたら、1シートで20行未満、20列未満という程度の情報量に対してファイルサイズが 5M を超えていた。
特に図形も絵も張り付けているわけでもなくテキストのみでこのサイズはどう考えてもおかしい。
ちなみにフォーマット形式は XLSX なので圧縮が効いているはず。100K すら普通はいかないはずだ。
XLSX 形式であれば、中身を確認することが出来るので調べてみることにした。
拡張子を ZIP へ変更し、中身を解凍。
変な絵が張り付いていないことを確認して、問題のシート情報のファイルを確認する。
今回はシートは一つだけなので
./xl/worksheets/sheet1.xml
を確認してみると・・・・
80Mを超えている。
このファイル。普通にエディタで開こうとするとファイルサイズが大きいのでまともに開かない。
しょうがなく、ファイルを分割して中身を確認すると、入力したデータ以外に
<row r=”7609″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7609″ s=”16″/></row>
<row r=”7610″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7610″ s=”16″/></row>
<row r=”7611″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7611″ s=”16″/></row>
<row r=”7612″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7612″ s=”16″/></row>
<row r=”7613″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7613″ s=”16″/></row>
<row r=”7614″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7614″ s=”16″/></row>
…
<row r=”1048575″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C1048575″ s=”16″/></row>
<row r=”1048576″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C1048576″ s=”16″/></row>
みたいなものが大量に書かれている。なんだこれ
想像してみる
データというわけではないので、セルに対しての属性情報が付与されていて、それが悪さをしているように感じる。
ただ、行の削除を行っても消すことが出来なかったので、行を選択した何かというよりはシート全体もしくは特定の列に仕掛けられた設定が生きているのだろう。
困った。
row タグは行データを取り扱っているとすると c タグが CELL を対象としていそう。
row タグ中の r 属性は行番号で、 spans 属性と x14ac:dyDescent 属性は謎だ。
c タグ中の r 属性は被るかもしれないが現在位置を表しているように見える
んー。cell の s 属性は 16 となっているのは何だろう。
調べてみた
dyDescent に関してはMS公式に説明が書いてあった。
http://msdn.microsoft.com/en-us/library/dd926776(v=office.12).aspx
要するに、double型の定義がされているということらしい。それだけ。ということは、x14ac のネームスペース中の定義として double と読むことが出来るのであれば、
x14ac はよくわからないけど Excel を意味するのではないだろうか。
と思ったら、ファイルの冒頭に
xmlns:x14ac=”http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac”
とあったので、大体理解があっていそう。
span 属性に関してはこちらに書いてあった
http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.row(v=office.14).aspx
要するに、データが入っている範囲を示すようで、この値はすべて同じになるようだ。
とすると、変だ。
現状では19行R列までデータが入っているので、
spans=”1:18″
になるはずなのだが。。。
ちなみに、シートのコピーではダメだったが新しく作ったブックにコピペしたら 22KB 程度のサイズになって、 spans も想定した値になった。
spans が変だったのは気になるのだが、それ以上に大量の row タグが作られてしまった原因のほうが問題なのだろう。
フォーマットの中身がなんとな~くわかってきたけれど、じゃ、どうすれば同じ状態を引き起こせるのか?という部分がさっぱりだ。
spans 属性の定義から言うと本来入る値とは異なっているので、ありていに言えば何かの操作の際にファイルがぶっ壊れたと考えたほうがいいのかもしれない。
うーん、壊れたのだとすると、これ以上追いかけてもあまり実りはないかな~。
とりあえず、少し調べ方に関して知ることが出来たので今日のところはよしとしようか