XLSX

XLSXファイルとは

2007 年以降の Excel の形式。複数シート、数式、書式を持てます。

XLSX とは何か

XLSX はコンテナです。誰か別のものが符号化した流れを、中に収めておく外殻です。 編集のために使われます。

拡張子は .xlsx、正式名称は Excel Workbook です。ただしどちらも、そのファイルが中に何を持てるかほどには多くを語りません。このページの残りは、その中身についての話です。

XLSX はどこから来たのか

Microsoft が 2007 年に公開しました。 仕様は ECMA-376 です。

古さが役に立つのは、ごく実務的な理由からです。形式が古いほど、それを覚える時間が多くのプログラムに与えられてきたということだからです。

仕様は公開されています

仕様書がそのまま公開されているので、中身を推し量るのではなく文書を読んで実装できます。この形式が数多くのプログラムに載っているのはそのためであり、20 年前に書かれたファイルが今も開けるのもそのためです。ただし「仕様が公開されている」ことと「使用料が要らない」ことは別の話です。中でコーデックを包んでいる形式では、特許のライセンスは仕様書が答えていない別の問題として残ります。

1 つのファイルに複数ページを持てます

XLSX ファイルは 1 ページに縛られていません。1 ページしか持てないものへ変換するときには、これが効いてきます。1 回の変換で出てくるのは 1 ページぶんのファイル 1 つで、取られるのは先頭のページです——どのページを取るかを選ばせてくれる変換であれば、そのページになります。

マクロを持てません

XLSX ファイルは実行されるコードを運べません。だからメールサーバーも文書ポータルもこれは通し、マクロを持てるほうの兄弟は止めるのです。

どんな種類の文書か

XLSX の中身は表計算です。セルと数式、そしてそれを囲むシートでできています。

これが変換のされ方を決めます。表計算は印刷の領域になり、列をどこで折るかは誰かが決めなければなりません。

自分を守るために何を備えているか

XLSX ファイルは必要なら暗号化を備えています。

暗号化されたファイルは、変換の前に解除する必要があります。ここでも、ほかのどこでも同じです。パスワードはコンバーターが通り抜けられる類のものではありませんし、通り抜けられると称するものには、そもそもファイルを渡すべきではありません。

XLSX を開けるのは何か

Microsoft Excel、LibreOffice Calc、Google Sheetsが読めますし、同じ種類のプログラムならたいてい読めます。

ファイルが開かないとき、形式が悪いことはめったにありません。たいていはプログラムのほうが形式より古いのです。もっと古い形式に変換してしまうのが確実な逃げ道で、このサイトの残りの部分はそのためにあります。

ブラウザーで開く

これを読めるブラウザーはありません。

これを変換するいちばんよくある理由がこれです。形式が悪いのではありません。ファイルを見せたい場所が、それを読めないというだけのことです。

作業のための形式です

XLSX は、開いて手を入れるために作られています。作業が続いているあいだはこの形式でファイルを持ち、完成したものが必要になるたびに、ここから書き出してください。

XML の入った ZIP ファイルで、中を覗けます

.xlsx を .zip に名前変更して開いてください。中には小さなディレクトリツリーがあります。ワークシートごとの XML ファイル一つ、ワークブック内のすべての異なる文字列を持つ共有テーブル、スタイルファイル、そして文書プロパティのフォルダー。画像や埋め込みオブジェクトは別ファイルとしてそこに置かれています。

これは単なる好奇心の対象ではありません。壊れたワークブックがアーカイブを開いてシート XML を取り出すことで救われる場合がある理由、ファイルサイズが振る舞う理由、そしてワークブックが、作った本人も覚えていないものを運んでいることがある理由がここにあります。この形式は誰もがすでに持っているツールで検査できます。

2007年の断絶と、それが直したこと

XLSX はバイナリの XLS 形式を Office 2007 で置き換えました。古い形式は Microsoft しか完全には理解していない複合バイナリ文書でしたが、新しい形式は文書化されていて、これが LibreOffice、Google スプレッドシート、Numbers、そして何十ものライブラリが XLS 対応が常に部分的な推測でしかなかったのに対して確実に読める理由です。

同じときに制限も動いていて、いまも知っておく価値があります。ワークシートは 1,048,576 行、16,384 列を持て、以前の 65,536 と 256 に対する数字です。ちょうど 65,536 行で切り詰められたエクスポートは、偶然ではなく古い形式を書くツールが原因です。

数式は二重に保存されています

数式のセルはそれぞれ二つのものを保持しています。テキストとしての数式そのものと、直近に計算された結果です。だからワークブックは十万個のセルをすべて再計算し直す前に、すぐに値を表示した状態で開きます。数式エンジンなしに XLSX を読むツールでも、それでも正しい数字を報告できる理由です。

これはまた、キャッシュされた値が古くなりうることも意味します。計算をしないプログラム ── 多くのエクスポートライブラリはそうです ── によって書かれたファイルは、結果を持たない数式を含み、Excel が開くまですべてのセルがゼロか空欄として読まれます。生成されたワークブックが合計を持つべき場所で空に見えるなら、たいていこれが原因です。

十五桁で、そこから正確でなくなります

数値は倍精度浮動小数点数として保存され、およそ十五桁の有効数字を持ちます。十六桁のクレジットカード番号、長い注文番号、国民識別番号は末尾の桁を失います。それは表示上だけの話ではなく、ファイルの中で恒久的にそうなります。

対策は、データが届く前に列をテキストにしておくことです。そうすれば数字は数量ではなく文字として保存されます。これは郵便番号の先頭のゼロが消えるのと同じ根本的な問題であり、同じルールが当てはまります。数字だけでできているというだけで、それは数値だということにはなりません。

ワークブックと一緒に、意図せず送ってしまうもの

文書プロパティには作成者、最後に保存した人、Office のインストールに登録されている会社名、作成と更新の日時が入っています。隠された行、隠された列、隠されたワークシートは隠れているだけで、存在していないわけではありません。データは XML の中にあり、誰でも読めます。

外部リンクがいちばん鋭い部分です。別のワークブックを参照する数式は、それがリンクされていたときのフルパスを保存していて、そのパスがしばしばネットワーク共有や、クライアント名、業務の構造を示すフォルダー階層を名指ししています。文書プロパティを消してもこれは取り除けません。それらはメタデータではなくシートの中に住んでいるからです。

XLSX の中にマクロは許されていません

これは意図的で、この形式のより良い決定の一つです。.xlsx で終わるファイルはマクロコードを含められず、マクロを持つワークブックは自ら名乗る .xlsm として保存しなければなりません。XLSM を XLSX に名前変更してもコードは密輸できません。ワークブックは単純にそれを失うだけです。

これは、メールで届く何かについての使える経験則になります。普通の .xlsx はそれを開いてもコードは実行できません。危険は .xlsm と、古い .xls にあり、どちらもコードを実行でき、どちらもそれをここまではっきりとは告げません。

ファイルが見た目より小さい理由

アーカイブの中身はすべて圧縮されていて、スプレッドシートの XML は非常に反復的なので、圧縮率は際立って良くなります。十万行のワークブックは数メガバイトに収まることがあります。繰り返されるテキストは共有テーブルに一度だけ保存され番号で参照されるので、同じ二十個のカテゴリー名が並ぶ列はほとんど何もコストを払いません。

ワークブックを大きくするのは、たいていデータそのものではありません。埋め込まれた画像、シート全体に使われた範囲外の書式、そしてピボットテーブルの元データをもう一度保存して並べ替えを可能にするピボットキャッシュです。ファイルが謎に五十メガバイトあるなら、たいていこの三つのどれかです。

良い作業用の形式で、貧弱な交換用の形式です

人にとって、XLSX は優れています。型が宣言され、日付は日付のままで、長い数字は書式を保ち、ファイルは開くときに何かを推測させる必要がなく自分の構造を運んでいます。同僚にスプレッドシートを送るなら、CSV より常にこちらが正しい選択です。

プログラムにとっては、必要な仕事に対して重すぎます。読み込むにはアーカイブを解凍していくつもの XML 文書をライブラリで解析する必要があり、CSV はライブラリなしでメモリより大きいファイルからでもストリームできます。誠実な分け方はこうです。人が開くなら XLSX、機械が読むなら CSV です。

ワークブックが開かないとき

いちばんよくある原因は破損ではなく、途中で終わったダウンロードか、メールゲートウェイによる書き換えです。アーカイブ自体が解凍できないなら、ファイルは切り詰められていて、修復では直りません。元の場所から取り直してください。

アーカイブは開けるのに Excel がワークブックを拒否するなら、シートの XML はたいてい無事で、損傷はその周りの小さな部分のどこかにあります。Excel 自身の「開いて修復」がたいていはこれを回復させます。それでもだめなら、アーカイブから手作業でシート XML を取り出せば、少なくともデータは取り出せます。

基本情報

XLSXフォーマットの識別子と出自。
拡張子.xlsx
メディアタイプapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
公開元Microsoft
初版2007
仕様ECMA-376