Pythonのpython-docxでWord文書を読み書きする方法

この記事では、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()などのメソッドで内容を追加し、ParagraphRunオブジェクトの属性を操作してスタイルを設定し、最後にsave()でファイルに保存するのが基本的な流れです。これにより、レポートの自動生成や文書の一括処理などが可能になります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次