🐷

python-docxを用いたMicrosoft Wordファイルの作成:テンプレート、int2kanjiの利用など

2022/05/31に公開

概要

以下のように表形式で管理している情報を、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 -> 二百六十万

この変換にあたっては、以下のライブラリを使用しました。

https://github.com/nagataaaas/Kanjize

以下のように実行することで、数字で管理していたデータを漢数字に変換することができます。

from kanjize import int2kanji
print(int2kanji(2600000))

まとめ

Microsoft Wordファイルを作成する際の参考になりましたら幸いです。

Discussion