このエントリーをはてなブックマークに追加 にほんブログ村 IT技術ブログへ
にほんブログ村
目次

はじめに

VisualStudioCodeを使ってソフトウェア設計書(Microsoft Word文書)を書いてみる取り組みをこれまで行ってきました。しかし、どうしてもMarkdown Proview Enhanced+PlantUML+Pandocだけだと細かい書式設定などがどうしてもうまくできないので、今度は、どこまでのことができるかやってみないとわからないのですが、ある程度のWord文書を作った後でpython-docxというPythonでWord文書を編集するソフトウェアを使用して整形してみようかと思います。

今回は、python-docxのインストールから基本的なWord文書の編集までをpython-docxのドキュメントサイトを参照して、実際にやってみたいと思います。

本記事は、関連する情報として、以下の情報を参考にしています。

python-docxのドキュメントページ
https://python-docx.readthedocs.io/en/latest/

python-docxのGitHub
https://github.com/python-openxml/python-docx

python-docxのPyPIページ
https://pypi.org/project/python-docx/

インストール

まず、python-docxをPython環境にインストールします。今回は、Anacondaの仮想環境を作り、インストールしてみました。

・Anacondaの仮想環境構築(まずはpython3.7で実施)

conda create -n python-docx-learn python=3.7 anaconda

インストール(pip)

conda installではまだpython-docxはパッケージが無いようなので、今回はpipでインストールしました。

pip install python-docx

なお、公式ドキュメントページには、python-docxのtar.gz形式でのインストール方法もありました。(下記)
インストール(tar.gzの場合)

tar xvzf python-docx-{version}.tar.gz
cd python-docx-{version}
python setup.py install

ひとまず、ここまでで、python-docxのモジュールが読み込めるか試してみます。

python
Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from docx import Document
>>> quit()

エラーが出ないのでモジュールは読み込めたようです。

この後のコードの作成はVisualStudioCodeで行います。

まずは実践してみる

次に、実際に公式ドキュメントのQuickstartにある内容と同等のことを試してみます。

Wordファイル生成/保存

from docx import Document

# ドキュメントのファイル名
docx_file = 'test.docx'

# ドキュメント生成
document = Document()


# ドキュメント保存
document.save(docx_file)

上記の記述でWordファイルが生成されます。

この操作では、Wordのオブジェクトを生成し、text.docxファイルとして保存します。
このオブジェクトは、デフォルトの「テンプレート」に基づいて空白のドキュメントが開きますWordで新しいドキュメントを開始するときに得られるものとほぼ同じです。

段落の追加

段落というか文章の追加は以下のように行います。
 

# 段落の追加
paragraph = document.add_paragraph('新しい段落')
prior_paragraph = paragraph.insert_paragraph_before('前に段落を挿入')

見出しの追加

見出しの追加は以下のように行います。

# 見出しの追加
document.add_heading('新しい見出し(デフォルトでは「見出し1」)')
document.add_heading('「見出し2」の見出し追加', level=2)

改ページの追加

改ページの追加は以下のように行います。

# 改ページの追加
document.add_page_break()

表の追加とセルの設定

表の追加やセルの設定は以下のように行います。表を追加し、行や列を取得して値を設定していくような流れになります。また、設定した値や表の行や列の数を取得することもできます。
 

# 表の追加
table1 = document.add_table(rows=2, cols=2)

# 表のセルを取得
cell = table1.cell(0, 0)

# セルのテキストを設定
cell.text = '0-0セルのテキスト'

# 2行目を取得し、テキストを挿入
row = table1.rows[1]
row.cells[0].text = '1-0セルのテキスト'
row.cells[1].text = '1-1セルのテキスト'

# ループで表の値を取得
for row in table1.rows:
    for cell in row.cells:
        print(cell.text)

# 表の行と列数を取得
row_count = len(table1.rows)
col_count = len(table1.columns)
print('{}行{}列'.format(row_count, col_count))

# 行を追加
row = table1.add_row()
row.cells[0].text = '2-0セルのテキスト'
row.cells[1].text = '2-1セルのテキスト'

# テーブルに追加する内容を定義
items = (
    (123, 'aaa', 'あああ'),
    (234, 'bbb', 'いいい'),
    (345, 'ccc', 'ううう'),
)

#
paragraph2 = document.add_paragraph('新しい段落2')

# 次のテーブルを追加
table2 = document.add_table(1, 3)

# 表のヘッダを定義
heading_cells = table2.rows[0].cells
heading_cells[0].text = '列ラベル0'
heading_cells[1].text = '列ラベル1'
heading_cells[2].text = '列ラベル2'

# 表に内容を設定
for item in items:
    cells = table2.add_row().cells
    cells[0].text = str(item[0])
    cells[1].text = item[1]
    cells[2].text = item[2]

# 表のスタイルを設定
table2.style = 'LightShading-Accent1'

イメージの貼り付け

画像などのイメージの作成は以下のように行います。サイズを指定することもできるようです。

# イメージの貼り付け
document.add_picture(
    'D:\\docker_workspace\\doc\\python-logo-master-v3-TM.png',
    width=Inches(3.6))

 

ここまでを実行してみる

ここまででやってきた処理をすべて実行してみます。最後にtext.docxの内容を確認してできたことを確認してみます。

以下がここまでの処理をすべて行ったコードです。(pydocx_text.py)

from docx.shared import Inches
from docx import Document

# ドキュメントのファイル名
docx_file = 'test.docx'

# ドキュメント生成
document = Document()

# 段落の追加
paragraph = document.add_paragraph('新しい段落')
prior_paragraph = paragraph.insert_paragraph_before('前に段落を挿入')

# 見出しの追加
document.add_heading('新しい見出し(デフォルトでは「見出し1」)')
document.add_heading('「見出し2」の見出し追加', level=2)

# 改ページの追加
document.add_page_break()

# 表の追加
table1 = document.add_table(rows=2, cols=2)

# 表のセルを取得
cell = table1.cell(0, 0)

# セルのテキストを設定
cell.text = '0-0セルのテキスト'

# 2行目を取得し、テキストを挿入
row = table1.rows[1]
row.cells[0].text = '1-0セルのテキスト'
row.cells[1].text = '1-1セルのテキスト'

# ループで表の値を取得
for row in table1.rows:
    for cell in row.cells:
        print(cell.text)

# 表の行と列数を取得
row_count = len(table1.rows)
col_count = len(table1.columns)
print('{}行{}列'.format(row_count, col_count))

# 行を追加
row = table1.add_row()
row.cells[0].text = '2-0セルのテキスト'
row.cells[1].text = '2-1セルのテキスト'

# テーブルに追加する内容を定義
items = (
    (123, 'aaa', 'あああ'),
    (234, 'bbb', 'いいい'),
    (345, 'ccc', 'ううう'),
)

# 区切り用に新しい段落を追加
paragraph2 = document.add_paragraph('新しい段落2')

# 次のテーブルを追加
table2 = document.add_table(1, 3)

# 表のヘッダを定義
heading_cells = table2.rows[0].cells
heading_cells[0].text = '列ラベル0'
heading_cells[1].text = '列ラベル1'
heading_cells[2].text = '列ラベル2'

# 表に内容を設定
for item in items:
    cells = table2.add_row().cells
    cells[0].text = str(item[0])
    cells[1].text = item[1]
    cells[2].text = item[2]

# 表のスタイルを設定
table2.style = 'LightShading-Accent1'

# イメージの貼り付け
document.add_picture(
    'D:\\docker_workspace\\doc\\python-logo-master-v3-TM.png',
    width=Inches(3.6))

# ドキュメント保存
document.save(docx_file)

出力したWordファイルは以下のようなイメージでした。
test_docx.png
記述した処理はすべてその通りにできているようですので、この先はAPIの詳細を見ながら実際にやって確認していきたいと思います。

まとめ

今回は、python-docxを使ってWord文書をPythonで編集してみました。今後は、どんなことかpython-docxでできるのかを実際にAPIを試しながら実験してみたいと思います。
 

関連記事
s-py.png

(8)Pythonの仮想環境をバージョン指定で切り替える

2021/03/05 13:48
Anacondaの有償化の対策として、Windows上での複数のPythonのバージョンの仮想環境の作成方法を紹介します。 この方法により、Anacondaほどではありませんが、自分の作ったテンプレート的な仮想環境を使いまわすことが可能になります。
visual-studio-code.png

(7)Visual Studio CodeでAnacondaの仮想環境を割り当てる

2019/03/26 23:02
Pythonによるソフトウェア開発を行うにあたって、コードエディタは必須のアイテムです。 今回は、マイクロソフトが提供しているVisual Studio…
anaconda-logo.png

(6)WindowsのAnacondaで仮想環境を切り替える

2019/03/24 18:57
pythonでは、複数の開発環境を切り替えて使用することが良くあります。 今回は、Windows上のAnacondaで動作環境(仮想環境)を作って切り替える方法を紹介します。
s-py.png

(5)内包表記を読み書きする

2018/06/03 23:28
他の人が書いたPythonのコードを読むときによくつまづくのが内包表記です。 内包表記は使わなくても処理ロジックは書けますが、使いこなすことでより短く読みやすいコードになるだけでなく、性能的にもよくなることがあります。…
s-py.png

(4)文法のおさらいと分かりにくいところ

2018/04/19 14:16
Pythonの再勉強のために、文法関連をおさらいするためにも過去の記事を含めて紹介します。
s-py.png

(3)手始めにTurtle Graphicsを使ってみる

2018/04/07 15:50
Pythonを勉強しなおすことを楽しく始めるために、Turtle Graphicsについて紹介します。
s-py.png

(2)Anacondaのインストール

2018/04/05 16:13
再勉強の環境作りとしてAnacondaのインストールの概要を紹介します。
s-py.png

(1)Pythonの再勉強のきっかけ

2018/04/05 0:12
世間では「簡単で覚えやすい」と言われるPythonを上手く使いこなせない筆者のPythonの再勉強の過程を紹介します。 今回は、長年プログラム開発をしてきた筆者が、Pythonを再勉強しようと思ったきっかけを紹介します。
s-py.png

Jupyter notebook事始め(1)-Pythonを手軽に使う

2017/10/03 16:54
Jupyter notebookでPythonを手軽に使う方法を紹介します。 基本的な環境は、CentOS7+Python3.5の環境ができているこをを前提としています。
s-py.png

いまさら始めるPython3(5)-Pythonで扱うデータの型

2017/08/03 12:06
Pythonのデータ型の概要を紹介します。