md2docx
md2docx copied to clipboard
Convert markdown to docx
md2docx
convert markdown to docx
markdownファイルをwordのdocxに変換するスクリプトです。
- PowerShellスクリプトなのでWindows限定です。
- 動作確認はOffice 2010でのみ行っています。
- 確認出来ているのは、Windows 7 + PowerShell V3です。
使い方
バッチファイル化してあるので、そちらを使用します。 コマンドプロンプトより、以下のように入力します。
> md2docx.cmd file.md
拡張子が docx に変更された、 file.docx が同じディレクトリに出来ているはずです。
もしくは、引数に何も指定しなければ、markdown file の入力を促すプロンプトが表示されるので、そこにエクスプローラなどから markdownファイルをドラッグアンドドロップしてEnterでもよいです。
対応記述形式
markdownといっても、現在対応している記述はまだまだ少ないです。 また、word独自対応するためにmarkdownにおけるコメントを使用している部分があります。
見出し
# 見出し 1
## 見出し 2
### 見出し 3
#### 見出し 4
それぞれ、wordのスタイル [見出し 1] 〜 [見出し 4]に対応しています。
表題、副題
#<!--%title--> 表題
#<!--%subtitle--> 副題
それぞれ、wordのスタイル [表題]、[副題]に対応しています。
リスト
* リスト 1
* リスト 2
* リスト2-1
* リスト 3
1. リスト 1
2. リスト 2
3. リスト 3
4. リスト 1
3. リスト 2
8. リスト 3
<!--% end of list -->
9. リスト 4
1. リスト 5
通常のリストと、番号付きリストです。
インデントをつけると、生成されるword文書もインデントされます。
番号付きリストの番号は、0~9であればなんでも良いです。通常は
自動的に前行の番号の続きになります。
<!--% end of list--> を入れると、次のリストは1から開始されます。
画像

<!--%200x100-->
<!--%300x-->
<!--%x200-->
画像の場所は、markdownファイルのある場所からの相対パスで記述します。 また、後ろに上記のように画像のサイズを指定することが可能です。 画像のサイズは縦横比固定なので、両方指定しても恐らくどちらか無視されます。 なので、片方だけ指定することも可能です。
テーブル
| 列1 | 列2 | 列3 |
| てすと1 | てすと2 | てすと3 |
行頭、行後の「|」も必須です。
改ページ
<!--%[改ページ]-->
<!--%[PageBreak]-->
改ページを挿入します。
改セクション
<!--%[改セクション]-->
<!--%[SectionBreak]-->
セクション区切りを挿入します。 セクション区切りは、「次のページから開始」になります。
他のセクション区切りを使用したい場合は、インラインマクロ を使用して、以下のように記述出来ます。
<!--!$selection.InsertBreak($CONST.wdSectionBreakContinuous)-->
セクション区切り(現在の位置から開始)
インラインマクロ
右寄せ文章<!--!$selection.ParagraphFormat.Alignment = $CONST.wdAlignParagraphRight-->
<!--! word マクロ --> でwordマクロ(PowerShell記述)が実行出来ます。
該当文章のみにマクロを指定したい場合に便利です。 この場合、「右寄せ文章」が右寄せになります。
提供されるwordのCOMオブジェクトは、以下の通りです。
$word : Word オブジェクト
$doc : Word Document オブジェクト
$selection : Word Selection オブジェクト
また、wordで使用出来る定数は、$CONST.定数名でアクセス出来ます。(まだアクセス出来る定数は少ない・・・)
複数行マクロ
<!--!
# Style change
$doc.Styles.Item("表題").Font.NameFarEast = "MS P明朝"
$doc.Styles.Item("表題").Font.Size = 20
$doc.Styles.Item("表題").Font.Bold = $true
$doc.Styles.Item("見出し 1").Font.NameFarEast = "MS P明朝"
$doc.Styles.Item("見出し 1").Font.Size = 16
$doc.Styles.Item("見出し 1").Font.Bold = $true
$doc.Styles.Item("見出し 1").AutomaticallyUpdate = $true
# Page setup
$doc.PageSetup.TopMargin = $word.MillimetersToPoints(25)
$doc.PageSetup.BottomMargin = $word.MillimetersToPoints(20)
$doc.PageSetup.LeftMargin = $word.MillimetersToPoints(20)
$doc.PageSetup.RightMargin = $word.MillimetersToPoints(15)
# Image size change
$doc.InlineShapes | % {
if ($_.Height -gt 200 ) {
$_.LockAspectRatio = $CONST.msoTrue; $_.Height = 200
}
}
-->
<!--!で始めて、-->で終わる、この記述内はすべてPowerShellとして実行されます。
インラインマクロと同様、$word、$doc、$selectionが使用出来ます。
<!--!と、-->はそれぞれ、単独で行頭に記述されている必要があります。
このように、結局書式の設定部分は、wordマクロをガリガリ書くことになります・・・。 その代わり、wordマクロを(PowerShellにて)記述出来るので、その気になればなんでも出来る!はずです。
TODO
- 目次
- 引用
- 処理速度アップ