2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【今日使えるどうでもいい雑学】エクセル(xlsx)を解凍、圧縮してみる(XML)

Last updated at Posted at 2019-04-26

はじめに

普段何気なくつかっているエクセル(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

飲み会のネタ程度にどうぞ。

それでは良い エクセル ライフを!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?