python-docxで日本語フォントを設定

python-docxでは、下記のようにしてデフォルトのフォントを変更することができます。

doc = Document()
style = doc.styles['Normal']
font = style.font
font.name = 'メイリオ'

 

しかし、ここで変更されるのは半角英数字だけのようです。検索すると以下のような解決方法もあるのですが、私の環境ではうまくいきませんでした。

pythonのメモ: python-docxで日本語のフォントを指定

 

そこで、デフォルトのスタイルを変更するのは諦めて、すべてのparagraphについて個別に設定する方法でごり押しすることにしました。日本語の文章をすべて挿入した後、下記のような処理を記述しておくと、日本語フォントがすべてメイリオになりました。
for paragraph in doc.paragraphs:
    for run in paragraph.runs:
        run.font.name = "メイリオ"
        run._element.rPr.rFonts.set(qn('w:eastAsia'), run.font.name)

 

ただし、表の中の日本語フォントについては、以下のように別途設定する必要がありました。表の中のparagraphはdoc.paragraphsには含まれないみたいです。

for table in doc.tables:
    for row in table.rows:
        for cell in row.cells:
            for paragraph in cell.paragraphs:
                for run in paragraph.runs:
                    run.font.name = "メイリオ"
                    run._element.rPr.rFonts.set(qn('w:eastAsia'), run.font.name)