This is the log of an attempt to export a Notion page as an md file and convert it to a word file.
NotionをWordファイルに変換したい!
今回は,少しマニアックな内容です。
突然ですが,私は授業準備をするとき,Notionのデータベースを使っています。Notionは無駄な情報が少なく,とてもシンプルなUIが特徴です。そのシンプルさゆえ,Wordよりも文書作成が捗るような気がしています。
また,Youtubeや画像の貼り付け等がしやすく,学校のChromebookからもブラウザで閲覧できる点もお気に入りです。
しかし,Notionには欠点があります。それは,印刷には向いていないという点です。一応Notionのページはpdfにエクスポートして,印刷することはできます。ですが,細かいレイアウトの設定はできません。
授業の流れや板書計画を考える際は,黒板のアスペクト比に近い方が好みです。Wordなら,A4の2段組レイアウトで対応できるのですが,Notionでそれを実現しようとすると難易度が高いです。
このような欠点があるため,Notionのページを手作業でWordにコピペし,体裁を整えてから印刷していました。
コピペしてそのまま体裁が整えばいいのですが,微妙に崩れてしまうことが多いです。授業準備をするたびにこれをやるのは大変。ということで,
と思っていました。
ステップ1 Notionのページをmdファイルにエクスポートする
Notionのページは,他のファイル形式にエクスポートすることができます。ページ右上のメニュー(…)から「Export」を選択するとこのようなメニューが出てきます。
「Export format」を「Markdown & CSV」に設定してエクスポートします。
エクスポートしたmdファイルをVScodeなどのテキストエディタで開きます。上部には,データベースのプロパティが表示されています。Notionのページで2段レイアウトを設定していると,htmlの<aside>タグが追加されるようです。
後にwordファイルに変換するときに邪魔になってしまうので,2段レイアウトは設定しないほうが良さそう。
また,calloutブロックの中に改行があると,太字設定の「**」がうまく機能しないようです。mdファイルを少しいじって,次のようにしました。
mdファイルの上部にoutputなどのメタデータを追加しました。このあたりはあまり詳しくなかったので,色々と調べながらやってみました。
ステップ2 mdファイルをwordファイル(.docx)に変換する準備
続いて,mdファイルをwordファイルに変換します。この操作のため,Pandocというツールを使いました。フリーのドキュメント・コンバーターツールです。mdファイルをwordファイルに変換してくれます。
上記のサイトでも触れられているのですが,mdファイルをそのままwordファイルに変換すると,wordデフォルトの設定が反映され,少しダサくなります。しかも,A4の横書き2段組になっていない…。
そこで,自分で作成したwordのテンプレートを適用して変換します。通常,wordのテンプレートといえば(.dotx)ですが,(.docx)でも構いません。少し設定の方法がややこしいので,下記のサイトを参考にしてください。
日本語サイトは情報が限られているので,必要であれば公式ドキュメント(英語版)も参考に。
(※日本語に翻訳されたユーザーズガイドもありますが,英語のほうがわかりやすい)
変換前のmdファイルを「input.md」,wordのテンプレートを「reference.docx」,変換後のwordファイルを「output.docx」として,VScodeのPowerShellに以下のコマンドを実行します。
$ pandoc input.md --reference-doc=reference.docx -o output.docx これで変換できますが,オプションをたくさん付けたいとき,コードが長くなってしまいます。そこで,「default.yml」に設定を書き込み,コマンドを実行するときに読み込ませるようにしました。
from: markdown+emoji
to: docx
reference-doc: 【reference.docxのフルパス】
$ pandoc input.md -d default.yml -o output.docx 他にも色々と設定できるらしいです。
番外編 VScodeのスニペット設定(Markdown)
ちなみに,ステップ1の後半でmdファイルの上部にメタデータを追加していますが,これを毎回入力するのは面倒です。どうにかならないかと検索すると,VScodeにはスニペット機能があるらしい。
こちらのサイトを参考に,スニペットを設定しました。Markdownのスニペットは,デフォルトで無効になっているらしく,有効にするための設定が必要でした。
{
"jugyou": {
"prefix": "jugyou",
"body": [
"---",
"output: word_document",
"date: $CURRENT_YEAR/$CURRENT_MONTH/$CURRENT_DATE",
"subject: \"授業準備\"",
"description: \"授業準備\"",
"fig_caption: True",
"#toc: True",
"#toc_float: True",
"---",
],
"description": ""
},
} jsonとスニペットの記法が分からず,少し苦労しました。tocとtoc_floatは,目次を作るときだけ#を外して使います。
ステップ3 いよいよ変換
いよいよ変換です。ステップ2で記載したコードをPowerShellで実行します。
$ pandoc input.md -d default.yml -o output.docx
できました!
word側の設定を頑張ったので,これまで通り(これまで以上に)きれいなレイアウトで出力することができました。
複数ファイルを一括で変換するときには,先ほどのコードの「input.md」と「output.docx」の名前を逐一変えて…といった面倒なことはやりません。
chat GPTくんにご教示いただきながら,.batファイルを作成しました。
@echo off
FOR %%F IN (*.md) DO (
set "input=%%F.md"
set "output=%%~nF.docx"
pandoc -d default.yml -s %%F -o %%~nF.docx
) これを実行すると,同じディレクトリ配下にある「*.md」ファイルが全て「*.docx」に変換されます。
(途中の「set ~」の2行はいらないかも?)
まとめ
よく分からない部分もありながら,なんとか1日で動くものを作ることができました。まだ画像を含んだファイルを変換していないので,どうなるのか動かしながら確認してみたいと思います。




