Skip to content

Repository files navigation

md2excel(Markdown → Excel .xlsx 変換)

Markdown ファイル(UTF-8)を読み取り、Apache POI を使って Excel(.xlsx)に整形出力するツールです。
仕様書・設計書の Markdown を、見出し / 段落 / リスト / 引用 / 表 / コードブロック などの体裁をできるだけ保ったまま Excel に落とし込みたい用途を想定しています。

本リポジトリは個人による開発であり、特定の組織・雇用主とは無関係です。

  • 入力: Markdown(UTF-8)
  • 出力: Excel(.xlsx)
  • シート名: spec

主な機能

ブロック要素

  • 見出し # 形式

    • # / ## / ### はそれぞれサイズ違いの太字スタイル
    • #### 以降は通常サイズの太字扱い
    • 行末の閉じ # を許容(例: ## title ##
    • トップレベル見出しは B 列起点
  • 通常段落(テキスト)

    • トップレベルは B 列起点
    • インデント量に応じて列を右へ
    • 同一インデントの連続行は、状態に応じて同じセルへ追記される場合あり
    • ハード改行 <br> や行末 2 スペース / \ による改行継続に対応
  • 箇条書き * / - / +

    • 先頭に を付与して出力
    • トップレベルは C 列起点
    • ネスト(インデント)に応じて列が右へ
    • ハード改行を含む場合は縦展開し、継続行は 1 列右へ出力
  • 番号付きリスト 1. / 1) / 12. / 12)

    • トップレベルは C 列起点
    • ネスト(インデント)に応じて列が右へ
    • ハード改行を含む場合は縦展開し、継続行は 1 列右へ出力
  • リスト共通

    • 引用ブロック外では、親リスト項目の直後に、より深い子リストが始まる場合、子リスト開始前に 1 行の自動空行を挿入
    • 対象例:
      • 1. a の下に - b
      • 1. a の下に 1. b
      • - a の下に 1. b
      • - a の下に - b
    • 引用ブロック内のネストリストにはこの自動空行ルールを適用しない
  • 引用 >

    • > の後ろに空白がなくても引用として扱う
    • 引用テキストは通常本文より 1 列右に配置
      • 例: トップレベル本文が B 列なら、トップレベル引用本文は C 列
    • 左端には 太い青線、背景はコードブロックと同系色で塗る
    • 引用の装飾(左罫線・塗りつぶし)は、引用本文の 1 列左から適用
    • 引用内の番号付き / 箇条書き / 継続行もインデントに応じて右へ展開
    • 引用内空行も可視の空行として出力
    • 行末が <br> の場合、次の行(> 行でも通常行でも)へ引用継続として吸い込む
  • コードブロック(フェンス ``` / ~~~

    • 背景グレー、外周に枠線
    • コード本文は ブロック開始位置の 1 列右 に配置
      • 例: トップレベルでは C 列
    • コードブロックの装飾(塗りつぶし・外周枠線)は、コード本文の 1 列左から適用
      • 例: トップレベルでは B 列から
    • 見出し直後にコードブロックが続く場合は、コードブロック開始前に 1 行の自動空行を挿入
    • コードブロック前の Markdown 空行は保持する(直前空行をコード行に再利用しない)
    • フォントは英数字を Consolas、日本語を Meiryo に切替
    • 開始フェンス後ろの info string を許容
    • 閉じフェンスは「開始時と同じ記号」「開始以上の長さ」「後続は空白のみ」で判定
  • 水平線

    • --- に加え、*** / ___ / - - - / * * * などにも対応
    • 空白・タブを含んでいても、同一記号(- / * / _)が 3 個以上であれば水平線として扱う
    • 行全体に下線(hairline)を描画
    • 水平線行は空行用スタイル(6pt)ベース
  • テーブル(パイプ | 形式)

    • | a | b | のような行に加え、a | b のように先頭 / 末尾の | がない行もテーブル行として扱う
    • 検出は「インラインコード外の | が 1 つ以上ある行」
    • 区切り行 |---|---|: も可、空白可)をヘッダ区切りとして扱う
    • セル内の \|| に復元
    • インラインコード内の | は区切りとして扱わない
    • セル内の <br> は空白に畳み込み(インラインコード内は維持)
    • ヘッダ行は太字+下線、ボディ行は薄い下線、最終行だけ下線なし

注意: 表は .xlsx 生成後に、必要に応じて手動で列幅調整などの体裁調整を行ってください(自動の列幅最適化は行いません)。


インライン要素(セル内の装飾)

  • 強調(太字 / 斜体)

    • 太字 **bold** / __bold__
    • 斜体 *italic* / _italic_
    • 太字+斜体の組み合わせに対応
    • 判定は逐次トグルではなく、CommonMark 寄りの delimiter run 解決で実装
      • Unicode の whitespace / punctuation を考慮
      • _ の単語内誤検出抑止あり
      • delimiter run の rule of 3 を反映
      • *** / ___ のような複合 run に対応
  • インラインコード(複数長バッククォート対応)

    • 単一の `code` だけでなく、複数長バッククォート列にも対応
    • コード中にバッククォートを含むケースを考慮
    • 赤字、等幅(ASCII は Consolas / CJK は Meiryo
  • ハード改行

    • コード外の <br> を分割点として解釈し、行を縦展開
    • 行末の「半角スペース 2 個以上」または「バックスラッシュ \」もハード改行として扱う
    • 行末が <br> の場合、次入力行へ継続
    • <br> をまたぐ時は、開いている強調(太字 / 斜体)を carry で保持
    • インラインコード内の <br> は分割しない

差別化ポイント(md2excel の狙い)

一般的な「Markdown→表だけ」変換ではなく、設計書の読みやすさを優先して Excel に整形します。

  • 出力開始位置は B2
  • 空行は 6pt の専用スタイルで扱い、見やすい余白を作る
  • リストの子リスト開始時は、引用ブロック外に限り 自動空行で見やすさを確保
  • 引用 > は本文位置と装飾位置を分け、左罫線+背景色で読みやすく表現
  • リスト / 引用 / 通常文 / hard break を組み合わせた時の列配置と継続規則を整理
  • コードブロック は背景グレー+外周枠線、ASCII / 日本語でフォントを切替
  • インライン装飾 は太字 / 斜体 / インラインコードをセル内リッチテキストで反映

動作環境

  • Java 8 以上
  • Apache POI(XSSF / XSSFWorkbook を使用)
  • Swing(JFileChooser / JOptionPane を使用)

注意: 本ツールは処理完了時に JOptionPane.showMessageDialog(...) を呼びます。
サーバー等の headless 環境で実行する場合は、GUI 呼び出し部分を無効化するなどの調整が必要です。


使い方

本ツールは GUI(ダイアログ)で設定します。
コマンドライン引数による詳細設定は行わず、実行時にダイアログで入力します。

実行方法

  • IDE から md2excel.app.MarkdownToExcel を実行
  • またはコマンドラインから main を実行
java ... md2excel.app.MarkdownToExcel

実行時に表示されるダイアログ

次の順にダイアログが出ます。

  1. Markdown ファイル選択(JFileChooser
  2. mergeCols 入力(既定: 40)
  3. フォント選択(既定: 游ゴシック)
  4. 縦位置選択(上揃え / 上下中央揃え / 下揃え、既定: 下揃え)
  5. # / ## / ### / 通常 のフォントサイズ入力
    • 既定: 16 / 14 / 12 / 11

出力ファイルは入力ファイルと同じ場所に .xlsx 拡張子で生成されます。


変換ルールの概要

開始位置

  • 出力開始セルは B2
  • 1 行目は空行用スタイル(6pt)で確保される

列配置(ざっくり)

  • トップレベル見出し / 通常段落 / 表 / 水平線は B 列起点
  • トップレベルコードブロック本文は C 列起点
  • コードブロックの装飾(塗りつぶし・外周枠線)は B 列起点
  • トップレベル箇条書き / 番号付きは C 列起点
  • トップレベル引用本文は C 列起点
  • 引用の装飾(左罫線・塗りつぶし)は B 列起点
  • インデントやネストが深くなると右へ展開
  • mergeCols を超える列は右端に丸め込み(clamp)

リストの補足

  • 引用ブロック外では、親リスト項目の直後に、より深い子リストが続く場合、子リスト開始前に自動空行を 1 行挿入
  • この自動空行は Markdown 由来の空行ではなく、見やすさのためにレンダラが補う空行
  • 引用ブロック内ではこのルールを適用しない

mergeCols の考え方

  • mergeColsシート左端(A 列)基準の列数
  • 既定値は 40
  • 既定の mergeCols=40 では:
    • 列幅設定対象: A〜AN
    • 実際の描画範囲: B〜AM

シート設定

  • グリッド線表示・印刷ともに OFF
  • 0..mergeCols-1 の列幅を固定
    • POI 内部幅は 3.125 * 256
    • Excel 上の見た目は 約 2.5
  • 使用列には既定セルスタイルを設定
  • 空行用スタイルは 6pt
  • 通常本文の既定フォントサイズは 11pt

依存ライブラリ(手動配置)

このリポジトリは Maven / Gradle を使用しません。
依存 jar は Git に含めないため、lib/README.md の手順に従って lib/ に配置し、プロジェクトのクラスパス(IDE の Build Path / Module Dependencies 等)に追加してください。


制限事項・非対応(現状)

  • 見出しは ATX 形式(#)を対象(行末の閉じ # は許容)
  • 強調は 太字 / 斜体 / インラインコード に対応
  • 打ち消し線 ~~text~~、リンク、画像などは未対応
  • コードブロックはフェンス形式(``` / ~~~)のみ
  • インデントコードブロック等は未対応
  • テーブルは「インラインコード外の | が 1 つ以上ある行」を前提とした簡易判定

ソース構成(役割メモ)

パッケージ

  • md2excel.app(起動)
  • md2excel.config(設定)
  • md2excel.excel(Excel / POI ユーティリティ・Style)
  • md2excel.markdown(Markdown 文字処理・リスト深さ等)
  • md2excel.render(レンダリング本体)

主なクラス

  • md2excel.app.MarkdownToExcel
    エントリポイント。設定読み込み → Markdown 読み込み(Stream)→ 描画 → xlsx 出力。
  • md2excel.config.Md2ExcelConfig
    GUI から設定値を作る。
  • md2excel.render.MarkdownRenderer
    行ごとの種別判定 → 状態遷移(ブロック境界処理)→ Excel の行・セルに出力。
  • md2excel.render.RenderState / md2excel.render.RenderContext
    レンダリング状態と共有オブジェクトを保持。
  • md2excel.excel.MdStyle
    Excel の各種 CellStyle を生成(見出し、空行、表、引用、コード枠など)。
  • md2excel.render.MarkdownInline
    セル内のリッチテキスト(太字 / 斜体 / インラインコード / 改行分割)を処理。
  • md2excel.render.MarkdownTable
    テーブル行の解析とセル生成、終端行の罫線処理。
  • md2excel.render.MdBlockBoundary / md2excel.render.BlockQuoteUtil / md2excel.render.RowUtil / md2excel.render.CellAppendUtil
    境界制御、引用スタイル適用、行生成・再利用、追記。
  • md2excel.markdown.ListStackUtil / md2excel.markdown.MdTextUtil
    リスト深さ管理、文字処理ユーティリティ。
  • md2excel.excel.Md2ExcelSheetUtil
    水平線行などのシート出力ユーティリティ。

生成結果の例(概念)

入力例:

## Title<br>Sub
- item1<br>detail
> quote<br>line2<br>
next line (still quote)
| a | b |
|---|---|
| **x** | `y` |

出力イメージ:

  • 見出しは B 列 に縦展開
  • 箇条書きは C 列、継続行は D 列
  • 引用本文は C 列、左罫線と背景は B 列 から適用
  • 行末 <br> により、次行も引用として継続可能
  • 表はヘッダ太字、セル内の強調やインラインコードをリッチテキストで反映

ライセンス

Copyright (c) 2025 bonpurple
Apache License 2.0(詳細は LICENSE を参照)

NOTICE / Third-party

NOTICE / docs/third-party/THIRD-PARTY-LICENSES.md / docs/third-party/THIRD-PARTY-NOTICES.txt を参照してください。

About

設計書Markdownを“それっぽい体裁”のままExcel(.xlsx)へ。<br>継続・引用・コード枠・表/リスト対応(Java 8 + Apache POI)

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages