はじめに
普段何気なくつかっているエクセル(xlsx)ですが、作りについて
ちょっとだけ書いてみようと思います。
今日の飲み会のネタくらいにしてください。
$ file test.xlsx
test.xlsx: Microsoft Excel 2007+
$
いきなり結論を書きますが、実はxlsxはzipされたファイルなんですね。
なんでunzipコマンドで解凍することが可能なんです。
※逆も可能
中身はxmlの集合体なんですね。
解凍
$ unzip test.xlsx
Archive: test.xlsx
inflating: [Content_Types].xml
inflating: _rels/.rels
inflating: xl/_rels/workbook.xml.rels
inflating: xl/workbook.xml
inflating: xl/sharedStrings.xml
inflating: xl/theme/theme1.xml
inflating: xl/styles.xml
inflating: xl/worksheets/sheet1.xml
inflating: docProps/core.xml
inflating: docProps/app.xml
$
再圧縮
※解凍の時に自分自身(test.xlsx)が残ってしまうので
どっかにmvしておきましょう
$ mv test.xlsx ../.
-r
つけないと圧縮後ファイルが開けないので注意
$ zip -r ~/aaa.xlsx *
adding: [Content_Types].xml (deflated 71%)
adding: _rels/ (stored 0%)
adding: _rels/.rels (deflated 60%)
adding: docProps/ (stored 0%)
adding: docProps/app.xml (deflated 49%)
adding: docProps/core.xml (deflated 48%)
adding: xl/ (stored 0%)
adding: xl/workbook.xml (deflated 58%)
adding: xl/worksheets/ (stored 0%)
adding: xl/worksheets/sheet1.xml (deflated 93%)
adding: xl/styles.xml (deflated 61%)
adding: xl/theme/ (stored 0%)
adding: xl/theme/theme1.xml (deflated 80%)
adding: xl/_rels/ (stored 0%)
adding: xl/_rels/workbook.xml.rels (deflated 66%)
adding: xl/sharedStrings.xml (deflated 17%)
$
中身の確認
xl/worksheets/
配下なんかは知っている感じの名前がでてきますよね。
ちなみに中身はこんなかんじです(フォーマットしています)
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0">
<selection activeCell="A2" sqref="A2"/>
</sheetView>
</sheetViews>
<sheetFormatPr baseColWidth="10" defaultRowHeight="20"/>
<sheetData>
<row r="2" spans="2:28">
<c r="B2" t="s">
<v>0</v>
</c>
<c r="C2" t="s">
<v>0</v>
</c>
(略)
0はsharedStrings.xmlの0番目の要素ってことです。
<si>
<t>aaaa</t>
<phoneticPr fontId="1"/>
</si>
(略)
ここだと、C2セルとかの値はaaaaだということですね。
注意点
※エクセルの仕様はなかなか複雑で、このxmlたちを組み合わせて色やセル操作をしています。
(私自身エクセルの仕様に明るいわけではないので間違っていたらご指摘ください)
常人はそこまで理解する必要はまったくないし、xmlをparseしてなにかしようとすると、高確率で挫折するのでやめましょうw
※実はkotlinでxmlをparseするコード書いたんですが、全然網羅できなくて諦めました...w
飲み会のネタ程度にどうぞ。
それでは良い エクセル ライフを!