コンテンツへスキップ

← 記事一覧に戻る

Excel を Markdown に:スプレッドシート格子からパイプテーブルへ

Excel の範囲をコピーして Markdown に貼り付けるとだいたい動く——シートに結合セル、幅の広い数式列、あるいはシートが3つ以上あるまでは。出てくるプレーンテキストのテーブルはメモ帳では読めますが、GitHub、Obsidian、wiki に貼り付けると壊れます。変換ツールが目の前の格子構造を理解していないからです。

この記事では、xlsx → Markdown 変換が実際に何をしているかを解説します。各ワークシートをどう残すか、結合範囲をどう本物のセルに展開するか、Excel 自身が表示する日付や数字をどう保つか、そしてどこでもレンダリングされる GFM パイプテーブルにどうたどり着くか。文中で述べているすべてはあなたのブラウザ内で実行されます——アップロードなし、アカウントなし、サーバーがブックに触れることもありません。

スプレッドシートと Markdown テーブルは別物

xlsx ブックは XML を詰めた ZIP です。中には複数のワークシートがあり、それぞれが長方形のセル格子です。セルは空、文字列、シリアル番号で保存された日付、数式、または $1,240.50 のような書式付き値を持ちえます。セル範囲を結合して1つの可視セルにすることもできます。構造全体にはレイアウト、数式、表示メタデータがあり、Markdown テーブルにはそれを格納する場所がありません。

Markdown パイプテーブル——GitHub、Obsidian、ほとんどの wiki がレンダリングする GFM 形式——は2行のメタデータのあと、1データ行につき1行ずつ続き、すべて同じ列数です。結合セルなし、数式なし、レイアウトなし。忠実な変換ツールの仕事は、このまったく異なる2つの世界の橋渡しです:格子を行に潰し、各セルに Excel が画面上で実際に見せてくれる値を入れます。

すべてのワークシートをエクスポートする、最初だけでなく

ほとんどのクイックツールはアクティブなシートしかエクスポートせず、残りを黙って捨てます。本物の変換は各ワークシートを走査し、完全に空のものをスキップし、それぞれを独立した Markdown テーブルとして出力すべきです——シート名を上に h2 見出しとして付けて。そうすることでブックは元の構造を反映したまま、1本の Markdown 文書になります。

このサイトのデフォルトは「すべてのシート」ですが、1つだけ欲しい場合はワークシートオプションから「最初のシートのみ」も選べます。完全に空、あるいは見出しだけのシートは自動でフィルタされ、空の h2 となってテーブルが下にない、という状態を防ぎます。

結合セル:見えない大きな問題

結合セルは、コピー&ペーストで壊れたテーブルができる一番の原因です。Excel が A1:D1 を1つの可視セルに結合したとき、下地の格子は実際には4セルのままです——A1だけに値があり、B1 から D1 は空です。素朴なコピー&ペーストや単純な変換ツールは4列を出力し、うち3列が空白になり、行カウントを壊してどの Markdown パーサーも正しくレンダリングできないテーブルを生成します。

解法は展開です。SheetJS がテーブルを作る前に、ブック内のすべての結合範囲を教えてくれます。各結合セルの左上の値をその範囲内の他のすべてのセルにコピーし、Pandoc に渡す格子に隙間がないようにします。出来上がるパイプテーブルは Excel の可視格子と同じセル数で、各行が揃い、テーブルはきれいにレンダリングされます。

日付・通貨・数値:Excel が表示するものを表示する

Excel は日付をシリアル番号で保存します——46095 は 2026 年 1 月 15 日です。この生の数値は Markdown では役に立ちませんが、変換ツールが任意のルールで再フォーマットすると日付を間違えます(このセルは 1/2 なのか 2/1 なのか?)。唯一信頼できる情報源は Excel 自身が表示するテキストで、SheetJS が raw:false オプションで直接読み取ります。

通貨、パーセント、小数点以下、千分位区切り——すべて数式バーに表示されている通りのテキストで通ります。1,240.50 は 1,240.50 のまま、0.12 は Excel が 12% と表示していれば 12% のまま、1/15/26 は 2026-01-15 に黙って再フォーマットされることなくそのままです。

数式 vs 値

Excel のセルには数式(=SUM(A1:A10))か計算結果(1240.50)のどちらかが入ります。Markdown テーブルには値しか入れられません。数式構文を残そうとする変換ツールもありますが、Excel の外ではめったに役に立ちません。私たちは計算後の値——Excel が数式を評価した後に表示する数字またはテキスト——を読み取って出力します。数式そのものが必要な場合は、先にブックを CSV にエクスポートしてください。この変換ツールは読みやすい結果のためのもので、計算過程のためのものではありません。

幅の広いテーブルとその扱い

15列あるワークシートも問題なく変換されます——Pandoc は完全に有効なパイプテーブルを出力します。見た目が良いかはどこで読むかによります。ほとんどの Markdown レンダラはパイプテーブルを自然に折り返します。Obsidian、GitHub、Hugo は幅をうまく扱います。うまく扱わない出力先については、変換前にブックを幅の狭いシートに分割するか、幅の広いテーブルがそのままの表現だと受け入れてレンダラに横スクロールさせてください。

列を黙って落としたりデータを折り畳んだりはしません。出てくるテーブルはブックにあった格子そのもの——驚きなし、列の欠落なしです。

なぜ2つのエンジンか:SheetJS が読み、Pandoc がフォーマットする

このサイトでは SheetJS Community Edition でブックをパースし、出来上がった HTML テーブルを Pandoc に渡して Markdown(GFM)を出力しています。SheetJS は Excel の厄介な内部事項——結合範囲、日付シリアル、表示形式、ZIP パッケージそのもの——を扱います。Pandoc は Markdown 方言の厄介な事項——パイプテーブル構文、配置ヒント、最終的な CommonMark 準拠——を扱います。

両方をブラウザ内で実行すると、サーバーに何も触れません。SheetJS ライブラリは実際に xlsx ファイルをドロップしたときにだけダウンロードされ、Pandoc は変換ツールを最初に使ったときからタブ内に常駐しています。典型的な複数シートのブックで端から端まで十秒未満です。

続きを読む

Excel を Markdown に変換