Python-docx入門- Word文書作成自動化への第一歩-
Python-docx入門- Word文書作成自動化への第一歩-
初めまして。UG-batと申します。自分の技術スタックをブログを備忘録として記録していきます。
今回は第一弾として、Word文書作成を自動化することを目指し、その入り口から紹介していきます。
対象読者
- Pythonの基本的な文法が理解できている方
- プログラミングでWordを操作したいと興味をお持ちの方
- 業務の自動化に高い熱をお持ちの方
Python-docxとは?
Python-docxというPython で利用可能なライブラリをご存知だろうか。
Wordを開かずともMicrosoft Word(.docx)ファイルの編集や生成ができるという優れもの。
これを利用するとどのようなメリットがあるのか?
- 自動化:定型的な文書作成、大量の文書生成を自動化できる。
- 効率化:手作業に比べて時間と手間を大幅に削減できる。
- 正確性:人為的なミスを減らすことができる。
- 連携: Pythonの他のライブラリ(例:Pandasでデータ処理、外部APIから情報取得など)と組み合わせることで、より高度な処理が可能になる。
本ブログはその第一歩目となる、文書作成の基本操作に焦点を当てています。
Python-docx入門
では早速このライブラリで何ができるのか、その基礎を紹介していきます。
Python-docxはPython 標準ではなく外部ライブラリなので、まずはご自身の環境にインストールする必要があります。コマンドプロンプトかターミナルで下記を実行してインストールしましょう。
なお、本ブログでは現時点で最新のPython-docx v1.1.2を使用しております。
pip install python-docx
インストールできたか不安であれば、
pip show python-docx
で確認。Python-docxの詳細が表示されればOK(Version: 1.1.2のように表示されます)。
さて、インストールが完了したら、ものは試しということでWordファイルを生成してみましょう。
.docxドキュメントを扱うためのクラスをインポートする必要があり、docxモジュールからDocumentクラスをインポートします。そしてそのDocumentクラスで新規.docxファイルを開きます。
from docx import Document
document = Document()
document.save("sample.docx")
これだけでカレントディレクトリにWordファイルを生成できます。簡単ですね!
sample.docxという名称で保存されているはずなので、実際に手を動かして確認してみると良いでしょう。
ただこれだけでは空のファイルが作成されただけになっているので、早速Wordファイルに文字を挿入してみましょう。
Documentクラス内に、add_paragraphと呼ばれるメソッドがあり、文書の末尾に新しく追加された段落を返すメソッドです。
このメソッドを使って文字を入れましょう。
document.add_paragraph("Let's create!")
これでファイルに”Let's create!”と文字を挿入することができます。
また、add_headingとするとWord文書のタイトルを挿入することができます。
document.add_heading("Let's create!")
もちろん見出しの大きさも指定できます、便利ですね
1~9の数字で指定でき、1に近づくほど大きい見出しになります。
document.add_heading("Let's create!", level=1)
add_runで文字の断片の書式設定をする
そしてWordで文章を編集する際によくやることと言ったら何がありますか?
もちろん作成するものによって様々ですが、何を作成していてもやることといえば、文字フォントの編集です。実はこれもスクリプトで操作できるんです。
また、フォントの操作は段落全体(Paragraph)ではなく文字(Run)に対して動作します。
Runオブジェクトの役割は文字単位の細かい書式設定です。反対に先ほどのように段落に対して行う処理がParagraphオブジェクトの役割です。オブジェクトの関係性は後述しますので、ここで理解できなくても問題ありませんのでご安心ください!
from docx.shared import Pt, RGBColor
example_text = document.add_paragraph()
run = example_text.add_run("Let's create!")
run.bold = True
run.font.size = Pt(18)
.bold = Trueとすることで、そのテキストを太字にしたり、.font.size = Pt(X)でフォントサイズを指定することができます。
そして、なんと色も変更することができます。色はRGBに準拠しています。以下例で示しているのは赤です。
run.font.color.rgb = RGBColor(255, 0, 0)
これらのような具体的な単位や色を扱う操作をする場合は、Python-docxのdocx.sharedというモジュールをインポートする必要があります。
また基本的にこれらのフォント操作をしない場合、生成される文書内のフォントはMicrosoft Wordの標準フォントに準拠して生成されます。
add_table
Wordで資料を作成する際に、表挿入を多用する方も多いでしょう。Python-docxは表の挿入にも対応しています。列数と行数を指定することで、表の挿入が可能になります。
ここで作成しているものはtableオブジェクトです。
また、.textプロパティで指定したセルのテキストにアクセスできます。
変数 = table.cell(行番号, 列番号).textとすると、指定したセル内のテキストを読み出すことができます。
反対に、指定したセルに特定の文字を書き込みたい場合は、
table.cell(0, 0).text = “書き込みたい文章”のようにダブルクオテーションで囲んで、書き込みたい内容を記述しましょう。
今回は文書作成の自動化が目標なので、後者を使うことがほとんどでしょう。
注意点として、行番号や列番号は1ではなく0から数えるようにしましょう!
table = document.add_table(rows=2, cols=3)
table.cell(0, 0).text = "お試し" # 表の一番左上のマスに「お試し」と書き込む。
add_picture
時には画像を挿入することもあるかもしれません。実は画像の挿入もできるのです。
Documentオブジェクトにあるadd_pictureを使用します。
from docx.shared import Inches # サイズ指定するなら Inches をインポートする
# 'image.png' という名前の画像ファイルを、幅4インチで挿入
document.add_picture('image.png', width=Inches(4.0))
オブジェクトの関係性
〇〇オブジェクトがたくさん登場して頭が混乱してしまった人のために、Python-docxにおけるオブジェクトの関係性を簡潔にまとめておきます。
- Document(文書全体)
- add_table() → Table オブジェクトを生成
- add_paragraph() → Paragraph オブジェクトを生成
- Paragraph (段落)
- add_run() → Run オブジェクトを生成
- Paragraph (段落)
大きな枠としてDocument(文書)があり、その中にTable(表)やParagraph(段落)などのオブジェクトを作成します。そしてParagraphオブジェクトの中にRun(文字)オブジェクトを作成するという流れです。
サンプルコード
from docx import Document
from docx.shared import Pt, RGBColor, Inches
document = Document()
# 段落の挿入とフォント操作
example_text = document.add_paragraph()
run = example_text.add_run("Let's create!")
run.bold = True
run.font.size = Pt(18)
run.font.color.rgb = RGBColor(255, 0, 0)
# 表の作成と指定セルに文字を挿入
table = document.add_table(rows=2, cols=3)
table.cell(0, 0).text = "お試し"
# 画像の挿入
document.add_picture('image.png', width=Inches(4.0))
document.save("sample.docx")
実際に生成されるWord文書

まとめ
Word文書作成自動化の第一歩目として、Python-docxライブラリでできる最も基本的な操作を紹介してきました。
これらの基本操作がデータの差し込みなどのより複雑な文書生成タスクを自動化するための基礎となります。
次回のブログでは今回学んだ基本操作を応用し、データの差し込みの初歩的な例をご紹介します。
(※ 本記事のサンプルコードは、python-docx バージョン 1.1.2 で動作確認をしています。)
Discussion