本文へスキップ
Convertube

Excel ファイルとは:ブックは XML の ZIP、そして PDF には表が存在しない

XLSX の中身、PDF から表を取り出すのが抽出ではなく推測である理由、どのセルが数値になるのかを解説。変換はブラウザ内で行います。

概要

種類
ドキュメント
拡張子
.xlsx
MIME タイプ
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
別名
XLSX, Microsoft Excel, spreadsheet

.xlsx ファイルは XML の ZIP アーカイブで、Word のページで説明した .docx と同じ作りであり、2007 年の Office Open XML への移行の一部でもあります。拡張子を .zip に変えると、シートの一覧を持つブックのパーツ、セルを保持するシートごとのパーツ、スタイルのパーツ、そしてそれらを結びつけるリレーションシップのファイルが見つかります。ZIP の中の XML なので、Microsoft のコードなしでブックを書き出せます。このサイトがしているのはまさにそれで、スプレッドシートのライブラリを組み込む代わりに、5 つの XML パーツを直接出力しています。セルの文字はインライン文字列として入れるので、各シートはそれだけで完結しています。上限は Excel 自身のもので、1,048,576 行、16,384 列、255 シートです。

続きを読む

難しさはすべて反対側にあります。PDF には表がありません。あるのはそれぞれ位置を持った文字の並びで、目に見える罫線は無関係な描画命令です。セルが存在することも、ましてやどの文字がどのセルに属するかも、ファイルのどこにも記録されていません。そのため格子は形状から推測するしかなく、有料のものも含め、これを行うツールはどれも実際にはそうしています。

推測は 2 段階で行います。行は共通のベースラインから求めます。そもそもページはそのように組版されているので、こちらは信頼できる半分です。列は横方向の範囲が重なることから求め、ある帯が列とみなされるには複数の行で繰り返し現れる必要があります。繰り返し現れることこそ、本物の列と、たまたまインデントされた段落とを分けるものです。左端だけでは機能しません。これは記録しておく価値があります。最初に思いつく実装であり、しかもごく普通の表で失敗するからです。6、96、240 を含む右揃えの数量の列は、左端がそれぞれ 1 桁ずつずれた 3 種類になるので、列が分裂し、すべての行に余計な空のセルができてしまいます。範囲の重なりなら、左揃え、右揃え、中央揃えのどれかを知らなくても対応できます。

セルに数値として入るものは、あえて控えめにしています。符号付きでもよい普通の 10 進数だけで、それ以外はありません。007、1,234、2026-09-10、+44 20、そして通貨記号の付いたものは、見たとおりのまま残ります。先頭のゼロ、桁区切り、日付はどれも、数値への変換で壊れてしまう情報だからです。小数点以下の桁数は保たれるので、48.50 は 48.5 ではなく 48.50 のまま届きます。制限は隠さずページに明記しています。結合セルはそれがまたがる最初の列に入り、文字が 2 行に折り返したセルは 2 行になり、1 ページにつき 1 シートが作られ、繰り返す列の構造がないページは行を 1 列に並べた形で戻ります。文章に対しては、それが誠実な答えです。

他の形式を Excel に変換

Excel:よくある質問

XLSX は本当に ZIP ファイルなのですか?

はい、DOCX とまったく同じです。拡張子を .zip に変えて開くと、ブック、各シート、スタイル、そしてそれらのリレーションシップの XML パーツが入っています。

数値はちゃんと合計できますか?

はい、普通の 10 進数のセルなら合計できます。それらは数値として書き出されるので、SUM などの関数が使えます。あいまいなものは意図的にテキストのまま残しており、テキストは合計されません。

なぜ参照番号の 007 がテキストになったのですか?

先頭のゼロが情報だからです。数値として保存すると 7 になり、元に戻す方法がなくなるので、数値に見えるだけの値は見たとおりのまま残しています。

表の列の区切りがなくなりました。なぜですか?

列は、重なり合い、ページの下へ繰り返し現れるセルの範囲によって認識します。1〜2 行しかない表や、セルの位置が不規則な表では、推測の手がかりがなく、テキストの行として戻ります。

スキャンした PDF にも使えますか?

使えません。推測する代わりに、処理を断ります。文字認識は検出した枠ごとに 1 行のテキストを返し、それで文章は組み立て直せても、格子は組み立て直せません。枠が隣のセルを結合してしまうことがよくあるので、結果は表のように見えて間違ったものになってしまいます。

ここで Excel を PDF に変換できますか?

ローカルではできません。改ページ、印刷範囲、列幅など、ブックを Excel と同じように描画するには Excel か LibreOffice が必要で、どちらもブラウザのタブでは動きません。ここでの変換は、XLSX から出ていくものではなく、XLSX へ向かうものです。