【python-docx】PythonでWordを操作する

パッケージの1つであるpython-docxを使用することで、PythonでWordファイルを操作することができます。スクレイピングなどのデータ出力にも便利なので覚えておきましょう。
 

Pythonのインストールがまだの方はこちらからどうぞ。

関連記事

Pythonはスクリプト型言語の1つです。少ないコードで初心者でも簡単にコーディングが可能で、かつ誰が書いてもコードが読みやすくなるという特徴を持った言語です。 Pythonはライブラリと呼ばれるプログラムの種類が豊富で、様々な機能[…]

自動化にwordを使用した例もあります。

関連記事

Pythonは、豊富なライブラリを扱えることからデータ解析の分野で人気があります。 今回はPythonで複数のライブラリを使用し、英語論文のPDFファイルからテキストを抽出後に翻訳してWordファイルに自動で出力するコードを作成しま[…]

広告

python-docxのインストール

python-docxをコマンドプロンプトでインストールします

pip install python-docx

Wordを操作する

Wordファイルを開くために使用するのはDocumentメソッド( )です。新規でWordファイルを開いて保存してみます。

from docx import Document

document = Document()
document.save('任意のファイル名.docx')

document = Document() #新規作成

Document( )メソッドに引数を渡さない場合、Wordファイルが新規で作成されます。
 

document = Document(‘任意のファイル名.docx’)

Document( )メソッドにファイル名を指定すると、カレントディレクトリにあるWordファイルの操作を行うことができます。
 

document.save(‘任意のファイル名.docx’)

save( )メソッドでWordファイルの保存を行います。これをしないとWordファイルに書き込みをしても反映させることができません。

python-docxでWord内の文章を読み込み

Word内の文章の読み込みには「python-docx-test.docx」を使用しました。

document = Document('python-docx-test.docx')

print(len(document.paragraphs))
print(document.paragraphs[2].text)

print(len(document.paragraphs[2].runs))
print(document.paragraphs[2].runs[7].text)

段落を取得

document.paragraph

paragraphオブジェクトでWord内の段落を、全てリストに格納して取得できます。

len()メソッドを使用すれば段落の数が分かります。

>>> len(document.paragraphs)
4


段落から文章を取り出したいときはtextオブジェクトを使用します。paragraphオブジェクトはリストで値が格納されるので、textオブジェクトで文章を取り出すときはリストを指定する必要があります。

>>> document.paragraphs[2].text
‘python-docxモジュールを利用することでPythonでもwordファイルを操作することができます。’

runs属性を取得

runsオブジェクトを使用することで、ある書式スタイルが連続する区間を取得することができます。

>>> len(document.paragraphs[2].runs)
8

pararaph[2]ではruns属性が8つに分かれています。内訳は以下の通りです。

wordのデフォルト書式は、かなと漢字が「MS 明朝(本文)」、ローマ字が「Century(本文)」になっているため、かな・漢字とローマ字の間でruns属性が切り替わっています。ほかにも、「-」や大文字の「P」の部分で分かれています。

runsオブジェクトもparagraphオブジェクトと同様にテキストの取得ができます。

>>> document.paragraphs[2].runs[7].text
‘ファイルを操作することができます。’

word内の全テキストを取得

document = Document('python-docx-test.docx')

all_text = ''
for para in document.paragraphs:
    all_text += para.text + "\n"
print(text)

document.paragraphはリストで返されるので、for文で繰り返して段落ごとにテキストを抽出し、改行コード「\n」を入れてall_textに追記しています。

実行結果

テスト

python-docxモジュールを利用することでPythonでもwordファイルを操作することができます。
いろいろ試してみましょう。

Wordにテキストを書き込む

段落の追加

新規でWordを開いて、テキストの書き込みをします。

document = Document()

document.add_paragraph('Hello World!')
document.save('HelloWorld.docx')

document.add_paragraph(‘任意の文字列’)

add_paragraph( )メソッドはWordに段落を追加します。

実行して出力されたWordを開くと、add_paragraph( )メソッドで入力した文字列が入っていることが確認できます。

指定した段落の最後に追記

add_run( )メソッドで段落に追記することができます。

document = Document()

document.add_paragraph('Hello World!').add_run('追記したテキスト')
document.save('HelloWorld_add.docx')

また、add_run( )メソッドでは段落を指定して文字列を追記することも可能です。
 

Word文書の読み込みで使用したWordを例に説明します。

document.paragraphs[2].add_run(‘追記した段落’)

parahraph[2]で第3段落を指定し、add_run( )メソッドで段落内に追記しています。

指定した段落の最後にテキストを追加することができます。

改行と改ページの追加

改行はrunオブジェクトのadd_break( )メソッド、改ページはadd_page_brak( )メソッドで行うことができます。

改行

document = Document('python-docx-test.docx')

document.paragraphs[2].runs[5].add_break()
document.add_page_break()
document.save('add_break.docx')

document.paragraphs[2].runs[5].add_break()

runを指定することで好きな位置で改行させることができます。

paragraph[2].runs[5]のテキストは「でも」の位置です。add_break( )メソッドによって「でも」の最後の位置で改行が行われます。

出力されたWordファイルを開くと改行されていることが確認できます。
 

改ページ

document.add_page_break()

文章の最後で改ページします。

Pythonで画像の追加

画像の追加にはadd_picture( )メソッドを使用します。

from docx import Document
from docx.shared import Cm

document = Document('python-docx-test.docx')
document = Document('python-docx-test.docx', width=Cm(5), height=Cm(5))

document.add_picture('python-logo-2.png')
document.save('pucture.docx')

add_picture(‘任意のファイル名.png’, width, height)

add_picture( )メソッドでは画像の高さと横幅の指定もできますが、引数を与えなければ画像の大きさはそのままになります。また、docx.sharedからCmモジュールをインポートすれば、cm単位での大きさの指定も可能になります。

実行すると以下のように、デフォルトの画像と大きさを指定した画像の2枚がWordに挿入されます。

関連記事

Pythonは、豊富なライブラリを扱えることからデータ解析の分野で人気があります。 今回はPythonで複数のライブラリを使用し、英語論文のPDFファイルからテキストを抽出後に翻訳してWordファイルに自動で出力するコードを作成しま[…]

広告