Excel・CSV・Parquet

Excel のブック、CSV・TSV の表、Apache Parquet のファイルは、BDF の中では同じものになる。表形式のデータのための無限平面のレイアウト、sheet View だ(spec.md §4.1)。CSV・TSV と Parquet は自分の描画コードを持たない。converter/csv と converter/parquet は値だけの単純な格子を組み立て、それをワークシートのセルを組んで描いている converter/xlsx のレイアウト・描画コードにそのまま渡す。だから CSV や Parquet のファイルは、ビューアの中で Excel のシートとまったく同じに見え、同じに振る舞う。太字で固定した見出し行、グリッド線と固定ペイン、表計算ソフトと同じ選び方(ドラッグ、Shift、行・列の見出し、矢印キー)で選べるセル。コピーすれば画像ではなくタブ区切りの値と HTML の表になる。

試す

ファイルをビューアにドロップするか、サンプルを試せる: Excel のブック、数式オブジェクトのあるシート、Shift_JIS の TSV ファイル、Parquet の表。

Excel(.xlsx)

converter/xlsx は OPC の zip パッケージ(.xlsx、.xlsm、.xltx、.xltm)を読み、ワークシートごとに sheet View を作る。セルの配置・書式・表示形式の解釈はすべて変換器自身が行う。BDF に再レイアウトはないので、ここが解釈の唯一の場所になり、シートは Tile に描かれる。セルの値はファイルに保存されているもの(数式の計算結果のキャッシュ)で、数式そのものは計算しない。

読み込むもの:

読み込まないもの: 右から左のシート(左から右に描く)、ピボットテーブルのスタイル(値は普通のセルとして描く)、スパークライン、フォームコントロール、旧形式(VML)の図形、セル内の画像、古いバイナリ形式の .xls。印刷の設定は、下の印刷のページを作るときに読む。

オプション(-param。bdf generate -h の内容):

オプション 値 既定
-param hidden= true 非表示シートを除く
-param views= sheet、print、both sheet(Excel の画面の見た目)。print は印刷のページ、both は両方
-param paper= a3、a4、a5、b4、b5、letter、legal など ページ設定に用紙がないシートの用紙。日本語のブックは a4、それ以外は letter

-hidden(-param hidden=true の短縮形)で非表示シートも含められる。マクロシートとダイアログシートは常に読まず、警告を出す。詳細は design.md §3.6 を、シートのセルがどのように Tile に分割されるかは design.md §6 を参照。

印刷のページ(print View)

-param views=print を付けると、シートを Excel が印刷するページの形にした flow View(print1、print2 …)を作る。帳票として作られたブックは、こちらが本来の見た目になる。both では sheet View の後に並ぶ。

ページは header・footer・body のレイヤーを持ち、body の矩形は余白の内側なので、ビューアの連続表示では本文だけが積まれる。印刷タイトルのように複数のページが同じ内容を見せる部分は、1 つの Object として 1 回だけ格納される。

Excel は印刷のときに行の高さと列幅をプリンタの画素に丸めるので、自動の改ページの位置は Excel と 1 行ずれることがある。手動の改ページはずれない。ヘッダーとフッターの画像(&G)、エラー値の印刷方法、メモの印刷は扱わない。

テンプレートとして穴埋めする

セルに {{名前}} のタグを書いたブックは、帳票のテンプレートとしてデータで穴埋めできる(bdf fill、xlsx.Fill)。結果は印刷のページの文書になる。書き方は帳票を作るを参照。

数式オブジェクト

シートに「挿入 → 数式」で置いた数式(テキストボックスや図形の中の Office Math)は、PowerPoint と同じく a14:m の Office Math から組む。サンプルは converter/xlsx/testdata/math.xlsx。セルの計算式(=SUM(A1:A3))はこれとは別で、保存されている計算結果を表示する。組み方は Word・HTML・Markdown の数式を参照。

CSV・TSV

converter/csv はテキストの表を読み、Excel で開いたときと同じ見た目の sheet View を 1 枚作る。実際に描いているのが Excel の変換器そのものだからだ。このパッケージが受け持つのは、CSV ファイルが明示していないことの推定である: 文字コード、方言、見出し行があるかどうか。どの推定も -param で上書きでき、実際にした推定は変換の要約(Result、CLI の最終行)に出る。

推定するもの:

値は書かれたままの表記で示す(Excel は 1.50 を 1.5 に変えてしまう)。先頭が 0 の数値(007、郵便番号)は数値にならず文字列のままだが、本物の数値と同じく右揃えになる。列幅は内容に合わせ、改行を含むセルは折り返して行が高くなる。そして Excel の変換器で描いているので、見出し行と判定された行は太字にして固定し、読み上げ用のテキスト層では列見出しとして印を付ける。固定ペインのある Excel のシートと何一つ変わらない。

オプション(-param。bdf generate -h の内容):

オプション 値 既定
-param charset= utf-8、shift_jis、euc-jp、euc-kr、gb18030、big5、windows-1252 など 推定
-param delimiter= カンマ・タブ・セミコロン・縦棒、または他の文字 推定
-param quote= double、single、none 推定
-param header= true、false 推定
-param table= 組み込みの Excel テーブルスタイル(例: TableStyleMedium2) なし

詳細は design.md §3.10 を参照。

Apache Parquet

converter/parquet は Parquet のファイル(pandas・Polars・DuckDB・Spark が書き、Hugging Face のデータセットもこの形で配られる列指向の形式)を読み、表を 1 枚の sheet View にする。描画はここでも converter/xlsx に任せる。CSV と違って推定するものはない。Parquet のスキーマに列の型が書かれているので、あとは値をどう文字にするかだけの問題になる。

読み込むもの:

値はデータツールが表示するのと同じ書き方にする: decimal は全桁、タイムスタンプは UTC で列が必要とする桁数の小数秒、UUID と interval はそれぞれの標準的な表記、リスト・マップ・構造体は JSON、ジオメトリの列(GEOMETRY、GEOGRAPHY、GeoParquet の WKB 列)は WKT にする。列名は 1 行目に太字で固定し、CSV の見出し行と同じ扱いにする。その下の 2 行目には、各列の Parquet の型(int64、decimal(10, 2)、timestamp[ms, UTC]、list<string> など)を灰色の行で固定して示す。

既定では先頭の 10,000 行だけを表示する(-param rows= で別の数を、all でシートの上限の 1,048,574 行まで指定できる)。読み込み自体は速い(100 万行・8 列で約 0.6 秒)が、シートの組版はそうではない: 10 万行で約 3 秒・690 MB、100 万行で約 45 秒・2.7 GB かかる。既定の行数が小さいのはこのためだ。rows= の指定にかかわらずセル数には 400 万の上限もあり、列の多い表は行数が減る。列数は Excel・CSV と同じくシートの上限の 16,384 列まで。

読み込まないもの: Parquet Modular Encryption(フッターが暗号化されたファイルは判別はできるが開けない)、ブラウザ版での Brotli 圧縮の列、LZO、まだ実験的な扱いの ALP エンコーディング。

オプション(-param。bdf generate -h の内容):

オプション 値 既定
-param rows= 数値、または all 10000
-param types= true、false true
-param table= 組み込みの Excel テーブルスタイル(例: TableStyleMedium2) なし

詳細は design.md §3.26 を参照。