【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
モジュールでは、次のような手順で文書を作成します。
docx.Document()
関数でDocument
オブジェクトを生成する(引数なし)add_paragraph()
メソッドを使ってParagraph
オブジェクトを生成し、引数として書き込みたい文字列を渡す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
オブジェクトの各属性の値をTrue
、False
、None
に設定することで変更できます。True
は有効、False
は無効、None
はParagraph
やRun
オブジェクトの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によるWordファイルの扱いについて解説しました。日頃よく扱うWord文書の作成や編集に関してもPythonde扱えることがわかりましたね。このような単純なテキストでないファイルに関しても扱えるようにマスターしておきましょう。
さらに追加で詳しく学びたいという方は、下記の参考書などを使った学習にも挑戦してみてください。
おすすめ参考書
冒頭でも紹介しましたが、Pythonによる自動化に向けた学習は、本シリーズでも参考にしている次の書籍がおすすめです。「退屈なことをPythonにやらせる」ようになるためにはうってつけの書籍なので、ぜひ参考にしてみてください。