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の下に- b1. 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>は分割しない
- コード外の
一般的な「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
次の順にダイアログが出ます。
- Markdown ファイル選択(
JFileChooser) mergeCols入力(既定: 40)- フォント選択(既定: 游ゴシック)
- 縦位置選択(上揃え / 上下中央揃え / 下揃え、既定: 下揃え)
# / ## / ### / 通常のフォントサイズ入力- 既定:
16 / 14 / 12 / 11
- 既定:
出力ファイルは入力ファイルと同じ場所に .xlsx 拡張子で生成されます。
- 出力開始セルは B2
- 1 行目は空行用スタイル(6pt)で確保される
- トップレベル見出し / 通常段落 / 表 / 水平線は B 列起点
- トップレベルコードブロック本文は C 列起点
- コードブロックの装飾(塗りつぶし・外周枠線)は B 列起点
- トップレベル箇条書き / 番号付きは C 列起点
- トップレベル引用本文は C 列起点
- 引用の装飾(左罫線・塗りつぶし)は B 列起点
- インデントやネストが深くなると右へ展開
mergeColsを超える列は右端に丸め込み(clamp)
- 引用ブロック外では、親リスト項目の直後に、より深い子リストが続く場合、子リスト開始前に自動空行を 1 行挿入
- この自動空行は Markdown 由来の空行ではなく、見やすさのためにレンダラが補う空行
- 引用ブロック内ではこのルールを適用しない
mergeColsは シート左端(A 列)基準の列数- 既定値は
40 - 既定の
mergeCols=40では:- 列幅設定対象: A〜AN
- 実際の描画範囲: B〜AM
- グリッド線表示・印刷ともに OFF
0..mergeCols-1の列幅を固定- POI 内部幅は
3.125 * 256 - Excel 上の見た目は 約 2.5
- POI 内部幅は
- 使用列には既定セルスタイルを設定
- 空行用スタイルは 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 / docs/third-party/THIRD-PARTY-LICENSES.md / docs/third-party/THIRD-PARTY-NOTICES.txt を参照してください。