python-docx を使うと Python で Word ドキュメントを操作できる.新しく Word ドキュメントを作ることもできるし,既存の Word ドキュメントから文章を抽出することもできる.前に紹介した python-pptx と関連している.最近 PowerPoint の文章を Word に繰り返しコピーする機会があり,作業効率を上げるために python-pptx と python-docx を組み合わせた自動化コードを実装していた.
python-docx : サンプルコードを実行する
python-docx のドキュメントにサンプルコードが載っている.実装されている機能をザッと箇条書きにすると以下のようになる.
- 見出し
- 段落
- 文字スタイル(太字 / イタリック)
- 箇条書き
- 段落番号
- 画像
- テーブル
- 改ページ
さっそく python-docx を pip install
してからサンプルコードを実行すると,以下のような demo.docx
を作れた!スゴイ!便利!なお,画像を埋め込む実装で monty-truth.png
は存在しないため cat.jpg
にした.
サンプルコードも載せておく.
from docx import Document from docx.shared import Inches document = Document() document.add_heading('Document Title', 0) p = document.add_paragraph('A plain paragraph having some ') p.add_run('bold').bold = True p.add_run(' and some ') p.add_run('italic.').italic = True document.add_heading('Heading, level 1', level=1) document.add_paragraph('Intense quote', style='Intense Quote') document.add_paragraph( 'first item in unordered list', style='List Bullet' ) document.add_paragraph( 'first item in ordered list', style='List Number' ) document.add_picture('cat.jpg', width=Inches(1.25)) records = ( (3, '101', 'Spam'), (7, '422', 'Eggs'), (4, '631', 'Spam, spam, eggs, and spam') ) table = document.add_table(rows=1, cols=3) hdr_cells = table.rows[0].cells hdr_cells[0].text = 'Qty' hdr_cells[1].text = 'Id' hdr_cells[2].text = 'Desc' for qty, id, desc in records: row_cells = table.add_row().cells row_cells[0].text = str(qty) row_cells[1].text = id row_cells[2].text = desc document.add_page_break() document.save('demo.docx')
python-docx : 他の機能も試す
サンプルコードには入っていなかった他の機能もドキュメントを読みながら試す.
- テンプレート
Document
オブジェクトに Word ドキュメントを指定するとテンプレートに書き込める
- ヘッダー
Section
オブジェクトからheader
プロパティにアクセスできる
- 文字スタイル(サイズ / フォントスタイル)
Paragraph
オブジェクトからfont
プロパティにアクセスできる
- フッター
Section
オブジェクトからfooter
プロパティにアクセスできる
今回は「青背景」のテンプレートを作って,Impact フォント(サイズ 50)で「kakakakakku blog」と書き出す.さらに「ヘッダー」と「フッター」も書き出す.コードも直感的に読みやすくそこまで違和感なく実装できる.
from docx import Document from docx.shared import Pt document = Document('template.docx') section = document.sections[0] header = section.header paragraph = header.paragraphs[0] paragraph.text = '/// This is Header' p = document.add_paragraph().add_run('kakakakakku blog') font = p.font font.name = 'Impact' font.size = Pt(50) font.bold = True footer = section.footer paragraph = footer.paragraphs[0] paragraph.text = '/// This is Footer' document.save('demo.docx')
コードを実行して demo.docx
を開くと以下のようになった(フッターは隠れている).おお!これは便利!
まとめ
python-docx を使うと Python で Word ドキュメントを操作できる.Word ドキュメントを直接作るのではなく,プログラムから間接的に操作したいときに使える.最近たまたま PowerPoint の文章を Word に繰り返しコピーする機会があり,作業効率を上げることができた.