Pythonにできることは自動化しよう!【第16回 Word】

こんにちは、管理人のウノケンです。

【Pythonにできることは自動化しよう!】シリーズとして、Pythonの基礎から順を追って学習し、作業の自動化・効率化を実現する能力を身に着けていきます。Pythonの基礎について学ぶだけで、大規模なコードを書かなくても十分に役に立つプログラムを記述することができるようになります。Pythonは気になるけど、プログラミングには苦手意識がある方も安心してトライしてみてください!

本シリーズでは、以下のようなことができるようになります。

  • ファイルの読み書き・管理
  • Webサイトからファイルをダウンロード
  • エクセルシート操作
  • PDF・ワード文書操作・テキスト抽出
  • 電子メール・SMS送信

うまく活用すれば作業に役立ちそうなワードがたくさん並んでいますね!

なお、本シリーズでは一部以下の書籍を参考にしています。「退屈なことをPythonにやらせる」ようになるためにはうってつけの書籍なので、ぜひ参考にしてみてください。

それでは見ていきましょう!



PythonでWordファイルを扱ってみよう python-docx

今回は、PythonでWordファイルを作成したり、読み込んだり、編集してみます。日頃扱っているWord文書に対する操作を自動化したい場合のテクニックとして、しっかりマスターしていきましょう。

PythonでWordファイルを扱うためには、python-docxモジュールを使用します。いつものようにpipでインストールしましょう。

%pip install python-docx

python-docxの基礎

python-docxを扱う上で、3種類のデータ型について押さえておきましょう。

  • Document:文書全体を表すオブジェクト
  • Paragraph:文書の段落を表すオブジェクト
  • Run:同じスタイル(フォント、サイズ、色など)のテキストの連続を表すオブジェクト

より詳しい内容については公式サイトを参照してください。

Word文書を作成する

まずは簡単なWord文書を作成してみましょう。python-docxモジュールでは、次のような手順で文書を作成します。

  1. docx.Document()関数でDocumentオブジェクトを生成する(引数なし)
  2. add_paragraph()メソッドを使ってParagraphオブジェクトを生成し、引数として書き込みたい文字列を渡す
  3. save()メソッドの引数にファイル名を渡して、文書を保存する

それでは簡単な例を見てみましょう。この例では、2つの段落を生成しています。

import docx
docw = docx.Document()
docw.add_paragraph('Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! Hello, World!')
docw.add_paragraph('This is a pen.')
docw.save('python-word.docx')

作成された文書を開いてみましょう(ここでは、MacのPagesで開いているため、Wordで開く場合とは見え方が多少異なります)。

きちんと段落が2つ作成されていますね。

Word文書を読み込む

次は、Word文書を読み込む方法を確認していきましょう。さきほど作成したWord文書を開いてみます。Word文書を作成したときと同様にdocx.Document()関数を使用しますが、今度は引数に開きたいWordファイル名を指定します。

文書ファイルを読み込んだら、内容を確認してみます。Documentオブジェクトにはparagraphsという属性があり、これには全てのParagraphオブジェクトが格納されています。

Paragraphオブジェクトのtext属性にはその段落の文章が文字列として格納されているので、これをprintしてみます。

docr = docx.Document('python-word.docx')
print(len(doc.paragraphs))
# 2
print(docr.paragraphs[0].text)
# Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! Hello, World!
print(docr.paragraphs[1].text)
# This is a pen.

このように、Pythonを使ってWordファイルを読み込むことができました。



スタイルを設定する

さきほど作成した文書には、文字列のスタイルは設定しませんでした。これでは通常のtxtファイルとなんら変わりはありません。

文書にスタイルを設定し、よりWord文書らしくしていきましょう。スタイルの設定は、Runオブジェクトの各属性の値をTrueFalseNoneに設定することで変更できます。Trueは有効、Falseは無効、NoneParagraphRunオブジェクトのstyleによる設定に従います。

さきほど作成したWord文書を開いて、スタイルを設定してみましょう。ここでは、太字やイタリック体、下線の設定をしてみます。

docr.paragraphs[0].runs[0].bold = True
docr.paragraphs[1].runs[0].italic = True
docr.paragraphs[1].runs[0].underline = True

docr.save('python-word2.docx')

作成した文書を確認してみます。

スタイルが設定され、よりWord文書らしさが出てきましたね。これ以外にもスタイルを設定する属性は多数存在します。詳しくは公式サイトを参照してください。

見出しを作るadd_heading()メソッド

Documentオブジェクトのadd_heading()メソッドを使うと、見出しのスタイルを設定して新たに段落を追加できます。

引数は、add_heading('見出しの文字列', 見出しのレベルを表す0~4の整数)となります。0を設定するとタイトル見出しとなります。

doc = docx.Document()
doc.add_heading('これはタイトルです。', 0)
doc.add_heading('これは見出し1です。', 1)
doc.save('python-word3.docx')

文書を確認してみます。

Wordらしいタイトルや見出しが設定されていますね。

画像を追加するadd_picture()メソッド

最後に文書に画像を追加してみましょう。

Documentオブジェクトのadd_picture()メソッドを使うと、文書の末尾に画像を追加できます。

doc.add_picture('unochu.png')
doc.save('python-word4.docx')

画像が追加された文書を開いてみましょう。

無事Word文書に画像を設定することもできました。



まとめ

今回は、【Pythonにできることは自動化しよう!】シリーズ第16回としてPythonによるWordファイルの扱いについて解説しました。日頃よく扱うWord文書の作成や編集に関してもPythonde扱えることがわかりましたね。このような単純なテキストでないファイルに関しても扱えるようにマスターしておきましょう。

さらに追加で詳しく学びたいという方は、下記の参考書などを使った学習にも挑戦してみてください。

おすすめ参考書

冒頭でも紹介しましたが、Pythonによる自動化に向けた学習は、本シリーズでも参考にしている次の書籍がおすすめです。「退屈なことをPythonにやらせる」ようになるためにはうってつけの書籍なので、ぜひ参考にしてみてください。