この記事では、PythonでMicrosoft Wordファイル(.docx
)を操作するためのライブラリpython-docx
について解説します。このライブラリを使えば、Word文書のテキスト読み込み、新規作成、段落や見出し、画像の追加、さらにはスタイルの適用といった作業を自動化できます。
1. 準備:python-docx
のインストール
python-docx
はサードパーティ製のライブラリなので、使用する前にインストールが必要です。
pip install python-docx
2. Word文書の読み込み
docx.Document()
にファイルパスを渡すことで、既存のWord文書を開き、Document
オブジェクトとして読み込むことができます。
ParagraphオブジェクトとRunオブジェクト Document
オブジェクトは、paragraphs
属性にParagraph
オブジェクトのリストを持っています。一つのParagraph
は、文書内の一つの段落に相当します。
さらに、各Paragraph
オブジェクトは、runs
属性にRun
オブジェクトのリストを持っています。Runは、同じスタイルを持つテキストの連続したかたまりです。例えば、「これは太字のテキストです」という段落は、3つのRun(「これは」、太字の「太字」、のテキストです」)に分かれます。
import docx
# 'sample.docx'というファイルがあると仮定
try:
doc = docx.Document('sample.docx')
print(f"段落数: {len(doc.paragraphs)}")
# 最初の段落のテキストを取得
print(f"最初の段落: {doc.paragraphs[0].text}")
# 2番目の段落のテキストと、その中のRunを取得
second_para = doc.paragraphs[1]
print(f"2番目の段落のRunの数: {len(second_para.runs)}")
for run in second_para.runs:
print(f" Runのテキスト: {run.text}")
except Exception as e:
print(f"ファイルの読み込み中にエラーが発生しました: {e}")
文書からすべてのテキストを抽出する 文書全体のテキストを取得するには、すべての段落をループして、そのテキストを結合します。
def get_text_from_docx(filename):
doc = docx.Document(filename)
full_text = []
for para in doc.paragraphs:
full_text.append(para.text)
return '\n'.join(full_text)
# all_text = get_text_from_docx('sample.docx')
# print(all_text)
3. Word文書の作成と書き込み
docx.Document()
を引数なしで呼び出すと、新しい空のDocument
オブジェクトが作成されます。
段落と見出しを追加する doc.add_paragraph()
で新しい段落を、doc.add_heading()
で様々なレベルの見出しを追加できます。
import docx
doc = docx.Document()
# 見出しを追加 (level=0はタイトル)
doc.add_heading('文書のタイトル', level=0)
# 段落を追加
doc.add_paragraph('これは最初の段落です。')
# 段落オブジェクトを保持して、後からテキスト(Run)を追加
para = doc.add_paragraph('これは2番目の段落の一部です。')
para.add_run(' そしてこれは同じ段落に追加されたテキストです。')
# 見出しレベル1を追加
doc.add_heading('セクション1', level=1)
doc.add_paragraph('これはセクション1の内容です。')
doc.save('created_document.docx')
画像と改ページを追加する doc.add_picture()
で画像を、doc.add_page_break()
で改ページを挿入できます。画像のサイズを指定するにはdocx.shared
モジュールが必要です。
from docx.shared import Inches
# doc.add_picture('my_image.png', width=Inches(2.5))
# doc.add_page_break()
4. スタイルの適用
テキストにスタイルを適用するには、主にRun
オブジェクトの属性を変更する方法と、Paragraph
オブジェクトに定義済みのスタイルを適用する方法があります。
import docx
doc = docx.Document()
# 段落にスタイルを適用
p1 = doc.add_paragraph('これは引用スタイルの段落です。')
p1.style = 'Quote'
# Runにスタイルを適用
p2 = doc.add_paragraph('通常のテキストと、')
run1 = p2.add_run('太字のテキスト')
run1.bold = True
p2.add_run('と、')
run2 = p2.add_run('イタリック体のテキスト')
run2.italic = True
p2.add_run('。')
doc.save('styled_text.docx')
まとめ
python-docx
ライブラリは、Word文書の読み書きを自動化するための包括的な機能を提供します。docx.Document()
でファイルを開くか新規作成し、add_paragraph()
やadd_heading()
などのメソッドで内容を追加し、Paragraph
やRun
オブジェクトの属性を操作してスタイルを設定し、最後にsave()
でファイルに保存するのが基本的な流れです。これにより、レポートの自動生成や文書の一括処理などが可能になります。