🐷
python-docxを用いたMicrosoft Wordファイルの作成:テンプレート、int2kanjiの利用など
概要
以下のように表形式で管理している情報を、Microsoft Wordの縦書きフォーマットに変換する機会がありましたので、その備忘録です。
変換前
研究課題名 | 課題番号 | 直接経費 |
---|---|---|
持続性と利活用性を考慮したデジタルアーカイブシステム構築手法の開発 | 21K18014 | 2600000 |
変換後
指定されたテンプレートの利用や、「数字 <-> 漢数字 の相互変換ライブラリ 「Kanjize」」を利用しています。
python-docxを用いたMicrosoft Wordファイルの作成
まず、以下のようなMicrosoft Wordのテンプレートファイルを作成します。指定されたレイアウトを使用しつつ、値を変更したい部分に{<変数名>}
を指定します。
そして、上記のテンプレートで使用した変数名に対応したjsonファイルなどを作成します。
{
"direct_cost": "二百六十万",
"indirect_cost": "七十八万",
"period_end": "二〇二三",
"period_start": "二〇二一",
"principal_investigator": "中村 覚",
"project_number": "二一K一八〇一四",
"research_category": "若手研究",
"research_title": "持続性と利活用性を考慮したデジタルアーカイブシステム構築手法の開発"
}
そして、以下のようなpythonスクリプトを実行することにより、指定されたフォーマットに基づくMicrosoft Wordファイルを作成することができます。
import docx
import json
item = {
"direct_cost": "二百六十万",
"indirect_cost": "七十八万",
"period_end": "二〇二三",
"period_start": "二〇二一",
"principal_investigator": "中村 覚",
"project_number": "二一K一八〇一四",
"research_category": "若手研究",
"research_title": "持続性と利活用性を考慮したデジタルアーカイブシステム構築手法の開発"
}
doc = docx.Document("template.docx")
for para in doc.paragraphs:
text = para.text
for key in item:
target = "{"+key+"}"
if target in text:
text = text.replace(target, item[key])
para.text = text
opath = "output.docx"
doc.save(opath)
数字 <-> 漢数字 の相互変換
上記の入力用のjsonファイルを作成するにあたり、数字を漢数字に変換する必要がありました。
例:2600000 -> 二百六十万
この変換にあたっては、以下のライブラリを使用しました。
以下のように実行することで、数字で管理していたデータを漢数字に変換することができます。
from kanjize import int2kanji
print(int2kanji(2600000))
まとめ
Microsoft Wordファイルを作成する際の参考になりましたら幸いです。
Discussion