[OpenXML]エクセルファイル(.xlsx)の中身

OpenXML

OpenXMLを使用する際、xlsxファイルの中身がどうなっているのかわかると理解しやすいです。

xlsxファイルの展開

xlsxファイルの中身はzip圧縮されたXML形式になっています。とりあえず圧縮を展開しましょう。
まず、Excelファイルの拡張子「.xlsx」を「.zip」に変更してください。(ファイルを選択し、右クリックで「名前の変更(M)」を選択。Windows11の場合、「その他のオプションを確認」>「名前の変更(M)」)

次に、圧縮展開ソフト等でzipを展開します。すると、以下のようなフォルダが出てきます。
(そういえば昔は「解凍」って言ってましたね)

このまま各xmlファイルをテキストエディタで開いても良いのですが、見にくいのでツールを使いましょう。

XMLの表示方法(XMLエディタ)

XMLファイルを綺麗に表示するツールはいくつかありますが、僕は「XMLEDITOR.NET」を使っています。ドラッグ&ドロップで表示してくれるので便利。(意外と対応してないソフトが多い)
※ただ、2009年のソフトだし、大きいファイルを開こうとすると無反応になる時間がけっこう長いのがネック。もっと良いエディタがあったら教えてください。

xlsxファイルの中身

ルートは以下の感じになっています。※これ以降、xlsxの内容によって多少違いがあります

.xlsxファイルの中身(ルート)。「xl」フォルダの中に重要なモノがいろいろ入っている。

「xl」フォルダの中は、以下の感じ。簡単に説明します。

・「worksheets」フォルダ
お目当てのシートやセルの情報はこのフォルダ内のファイルにある。

・comments*.xml
セルに付けた「メモ」がシート毎にこの中にまとまっています。メモの中身を見たい場合はここから取得する必要があります。([OpenXML]メモの取得[#C]
*はシートの番号(1~)です。Excelでシートの順番を入れ替えると、この数字も入れ替わります。

・sharedStrings.xml
セルの文字列がこの中にまとまっています。後述のセル情報には、このリスト内の番号が記載されています。(sharedStrings.xmlのファイル内の順番がずれると、全部のセル内の文字が違ってしまう)

そして、「worksheets」フォルダには、セルの情報がシート毎に記載されています。

・Sheet*.xml
*はシート番号(1~)です。Excelでシートの順番を入れ替えると、この数字も入れ替わります。

Sheet*.xmlの中身

XMLEDITORで表示するとこんな感じです。

例えば、
>row[r=1][spans=1:10]
> c [r=B1][s=1][t=s]
> ┗v[36]
row[r=1]は、1行目(column=1)。
c[r=B1]はB1セルの情報という意味。
[s=1]は「表示形式」定義の1番で表示。(「標準」とか「%」とか「日付」とか)。ユーザー定義はStyle.xmlで定義。
[t=s]がある場合は文字列を表示。v[36]なので、sharedStrings.xml内の36番の文字列を表示する。
逆に、[t=s]が無い場合は、数値か数式。

c[r=A2] f[B2+100]は、A2セルが数式「=B2+100」の意味。(“formula”の”f”?)(v[102]はExcelが計算した計算結果。OpenXMLでセルに数式を設定しても計算はしてくれないので、vは空になります。次にExcelでxlsxファイルを開き、計算させて保存すると、初めてvに数値が記載されます(※保存しないとダメ))
c[r=B2] v[2]は、B2セルが数値「2」の意味。

参考書

細かい所までは書かれていませんが、Kindle Unlimitedで読めるので一度読んでみると良いかと。ちなみに英語ですが、Googleレンズの翻訳機能とか使えば読みやすいかと。

Bitly

コメント

タイトルとURLをコピーしました