Skip to content

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

License

Notifications You must be signed in to change notification settings

bonpurple/md2excel

Repository files navigation

md2excel(Markdown → Excel .xlsx 変換)

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

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

主な機能

ブロック要素

  • 見出し #####

    • #/##/### はそれぞれサイズ違いの太字スタイル
    • #### 以降は通常サイズ太字扱い
    • 原則 A 列に出力(indent=0 の見出し)
  • 通常段落(テキスト)

    • インデント量に応じて列を右へ(A 列起点)
    • 同一インデントの連続行は同じセルへ追記される場合あり(状態により制御)
  • 箇条書き * (先頭が * の行)

    • 先頭に を付与して出力
    • ネスト(インデント)に応じて列が右へ(B 列起点)
    • <br> を含む場合は行を縦展開し、2行目以降は1列右(説明行)へ出力
  • 番号付きリスト 1. / 12. (数字 + . + 空白)

    • ネスト(インデント)に応じて列が右へ(B 列起点)
    • <br> を含む場合は縦展開+継続行を右列に出す挙動に対応
  • 引用 >

    • 左端に太い青線、背景をコードブロックと同系色で塗る(2種類のスタイル)
    • <br> を含む場合は同じ列に縦展開
    • 行末が <br> の場合、次の行(> でも通常行でも)へ引用の継続として吸い込む
  • コードブロック(フェンス ```)

    • 背景グレー、フォントは英数字は Consolas、日本語は Meiryo に切替
    • 枠線をブロックの外周に付与
    • コードフェンスは コードブロック中でも最優先で判定され、閉じることができます
  • 水平線 ---(行の trim 後が --- と一致)

    • 行全体に下線(hairline)を描画
  • テーブル(パイプ | 形式)

    • | a | b | のような行をテーブル行として扱う
    • 区切り行 |---|---|: も可、空白可)をヘッダ区切りとして扱う
    • セル内の \|| に復元
    • インラインコード `...` 内の | は区切りとして扱わない(安全側)
    • セル内の <br> は「空白」に畳み込み(インラインコード内は維持)
    • ヘッダ行は太字+下線、ボディ行は薄い下線、最終行だけ下線なし

注意: テーブル(表)は .xlsx 生成後に 手動で列幅調整などの体裁調整が必要です(自動の列幅最適化は行いません)。

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

  • 太字 **bold**
    • ** が誤検出されないように「本物の太字マーカー判定」が入っています(例: TE** 等のリテラル対策)
  • インラインコード `code`
    • 赤字、等幅(ASCII は Consolas / CJK は Meiryo)
    • ** と混在(例: ** 内の `code`**\code`**` 相当)も考慮
  • <br>(HTMLの改行タグ)対応
    • コード外の <br> を分割点として解釈し、行を縦展開
    • 行末が <br> の場合、次入力行へ継続(太字継続なども carry で保持)
    • インラインコード内の <br> は分割しません

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

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

  • <br> を“改行”として扱い、縦展開+行末 <br> は次行へ継続(太字継続も保持)
  • 引用 >:左端に太い青線+背景色、<br> は同列に縦展開、行末 <br> は次行(通常行も含む)へ吸い込み継続
  • コードブロック(```):背景グレー+外周枠線、ASCII は Consolas / 日本語は `Meiryo` に自動切替
  • 列配置ルールが明確:トップレベルは A 列、インデントは右へ。リストは B 列起点でネスト深さに応じて右へ(上限は clamp)
  • インライン装飾**bold**`code`(赤字・等幅)をセル内リッチテキストで反映

動作環境

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

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


使い方

1) コマンドライン引数で実行

MarkdownToExcelmain は次の引数を受け取ります。

java ... md2excel.MarkdownToExcel <input.md> [output.xlsx] [mergeCols] [fontName]
  • input.md(必須): 入力 Markdown パス
  • output.xlsx(任意): 出力パス
    • 省略時は input.md の拡張子を .xlsx に置換
  • mergeCols(任意): 1行として扱う列数(既定: 40
  • fontName(任意): 通常フォント名(既定: 游ゴシック

このモードでは、見出しサイズや縦位置は既定値で固定されます。

  • #: 16pt / ##: 14pt / ###: 12pt / 通常: 10pt
  • 縦位置: CENTER

2) 引数なしで実行(GUI)

引数なしの場合、次の順にダイアログが出ます。

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

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


変換ルールの概要

列配置(ざっくり)

  • トップレベル(インデント 0)は A 列起点
  • インデントがあるブロック(コード/引用/テーブル等)は B 列起点で右へ
  • 箇条書き・番号付きはネスト深さに応じて右へ
  • mergeCols を超える列は右端に丸め込み(clamp)されます

シート設定

  • グリッド線表示・印刷ともに OFF
  • 0..mergeCols-1 の列幅を固定(3 * 256
  • 既定セルスタイルを設定(通常スタイル)

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

このリポジトリは Maven/Gradle を使用しません。
依存 jar は Git に含めないため、lib/README.md の手順に従って lib/ に配置し、Eclipse の Build Path に追加してください。


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

  • 箇条書きは * のみ判定(- + は非対応)
  • 強調(_italic_ 等)やリンク等は未対応(太字 ** とインラインコード ` ` のみ)
  • コードブロックはフェンス ``` のみ(チルダ等は未対応)
  • テーブルは「先頭が | で、行内に複数 | がある」形式を前提(末尾 | を前提とした切り出し)

ソース構成(役割メモ)

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

生成結果の例(概念)

入力例:

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

出力のイメージ:

  • 見出しは A 列に 2 行(<br> で縦展開)
  • 箇条書きは B 列、2行目以降は C 列に縦展開
  • 引用は同列に縦展開し、行末 <br> により次行も引用として継続
  • 表はヘッダ太字、セル内の **` をリッチテキストで反映

ライセンス

Apache License 2.0(詳細は LICENSE を参照)

About

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

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages