この記事で分かること
- PythonプログラムでWord(ワード)を自動で作成する方法が分かる
- PythonプログラムでWord(ワード)を自動で読み取る方法が分かる
PythonでWord(ワード)を操作する概要
この記事では、Pythonを使ったワード(Word)ファイルの作成方法と読み込み方法説明します。これによって、業務の中でワードを作成する機会があった場合に、あるデータに基づいて自動的にワードファイルを編集することができます。
PythonでWord(ワード)操作する前提環境
ワード(Word)を操作する前提の環境は、下の記事で説明している私の環境と同じ環境で確認しています。
レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。
PythonでWord(ワード)を操作するサンプルプログラム
ここでは、ワードファイルを作成する関数と、ワードファイルを読み込む関数を定義して、それらを実行するサンプルプログラムを説明します。サンプルプログラムは大きく下記のような項目で説明します。
- ライブラリをインポート
- ワードファイルの作成
- ワードファイルの読み取り
1.ライブラリのインポート
まずは、ワードを扱うためのライブラリ「docx」をインポートします。
import docx
ライブラリ「docx」をインポートする。
2.ワードファイルの作成
ここでは、ワードファイルを作成する方法を説明します。ワードの作成には次の手順を行います。
- ワードオブジェクトを作成する
- パラグラフを追加する
- パラグラフオブジェクトを取得する
- テキストをパラグラフに追加する
- ワードファイルを保存する
上記の手順それぞれに関数を定義しているので、それらの処理内容を下記で説明します。
ワードオブジェクトを作成する
まず、ワードオブジェクトを作成する関数「create_docx」を定義します。ライブラリ「docx」の「Document」という関数を呼び出すと、ワードのオブジェクトが作成されます。作成したワードオブジェクトを戻り値として返却します。
# create docx
def create_docx():
doc = docx.Document()
return doc
- 関数「create_docx」を定義宣言する。
- 変数「doc」をライブラリ「docx」の関数「Document」から返却されるワードオブジェクトで初期化する。
- 変数「doc」を戻り値として返却する。
パラグラフを追加する
ここでは、パラグラフを追加する関数「add_paragraph」を定義します。引数に、ワードオブジェクトの引数「docx_object」と追加したい文字列の引数「text」を取り、「text」で指定された文字列の入ったパラグラフが、「docx_object」のワードオブジェクトに追加されます。
# add paragraph
def add_paragraph(docx_object,text):
docx_object.add_paragraph(text)
- 関数「add_paragraph」を定義宣言する。
- 引数で得られたワードオブジェクト「docx_object」に対して関数「add_paragraph」を呼び出す。
パラグラフオブジェクトを取得する
パラグラフオブジェクトを取得する関数「get_paragraph_object」を定義します。
関数「get_paragraph_object」はワードオブジェクトの変数「docx_object」と取得したパラグラフオブジェクトの順番を表す変数「count」を引数に取り、指定された順番のパラグラフオブジェクトを返却します。
エラー処理として、「count」に負の値を入力されたり、ワードオブジェクトに存在しない数の番号が入力されると「None」を返却するようにしています。
# get paragraph object
def get_paragraph_object(docx_object,count):
if (count > 0) and (len(docx_object.paragraphs) > count):
return docx_object.paragraphs[count]
else:
return None
- 関数「get_paragraph_object」を定義宣言する。
- 変数「count」が 0よりも大きく、かつ 変数「docx_object」に存在するパラグラフ数「paragraphs」が変数「count」よりも大きい場合は以下の処理を実行する。
- 変数「docx_object」の「count」番目のパラグラフ「paragraphs」を返却します。
- 以外の場合は、以下の処理を実行する。
- 「None」を返却します。
テキストをパラグラフに追加する
既存のパラグラフにテキストを追加する関数「add_text」を定義します。
引数に既存のパラグラフオブジェクト「paragraph_object」と追加する文字列の変数「text」を入力(引数)とし、パラグラフオブジェクトで指定されたパラグラフに変数「text」で指定された文字列を追加します。
# add text to paragraph
def add_text(paragraph_object,text):
paragraph_object.add_run(text)
- 関数「add_text」を定義宣言する。
- 引数で得たワードパラグラフのオブジェクト「paragraph_object」の関数「add_run」を呼び出す。
ワードファイルを保存する
ワード保存するために、「save_docx」という関数を定義します。ワードオブジェクトが格納された変数「docx_object」とファイル名が格納された変数「file_name」を引数に取り、ファイル名「file_name」で指定されたファイル名のワードを保存します。
# save docx
def save_docx(docx_object,file_name):
docx_object.save(file_name)
- 関数「save_docx」を定義宣言する。
- 引数で得たワードオブジェクト「docx_object」の関数「save」を呼び出す。
定義した関数の実行(ワードフアイルの作成)
今回作成するサンプルプログラムでは、大きく下記のような種類の処理で、ワードファイルを作成しています。
- ワードオブジェクトを作成
- パラグラフの追加
- パラグラフに文字列を追加
- ワードファイルの保存
if __name__ == '__main__':
# set file name
filename = 'test.docx'
# create docx object
doc_obj = create_docx()
# add paragraph
add_paragraph(docx_object=doc_obj,text='Hello Team!')
add_paragraph(docx_object=doc_obj,text='python')
add_paragraph(docx_object=doc_obj,text='java')
add_paragraph(docx_object=doc_obj,text='c#')
# add text to paragraph
paragraph_obj = get_paragraph_object(docx_object=doc_obj,count=3)
if paragraph_obj != None:
add_text(paragraph_object=paragraph_obj,text="+add text")
# save docx file
save_docx(docx_object=doc_obj,file_name=filename)
- 変数「filename」を文字列 「test.docx」で初期化する。
- 変数「doc_obj」を関数「create_docx」の戻りで初期化する。
- 引数にワードオブジェクト「doc_obj」と文字列「Hello Team!」を指定して、関数「add_paragraph」を呼び出す。
- 引数にワードオブジェクト「doc_obj」と文字列「python」を指定して、関数「add_paragraph」を呼び出す。
- 引数にワードオブジェクト「doc_obj」と文字列「java」を指定して、関数「add_paragraph」を呼び出す。
- 引数にワードオブジェクト「doc_obj」と文字列「c#」を指定して、関数「add_paragraph」を呼び出す。
- パラグラフオブジェクトを入れる為の変数「paragraph_obj 」を関数「get_paragraph_object」から返却される戻り値で初期化する。
- もし「paragraph_obj」が「None」ではない場合は以下の処理を実行する。
- 引数にパラグラフオブジェクト「paragraph_obj」と文字列「+add text」を指定して、関数「add_text」を呼び出す。
- 引数にワードオブジェクト「doc_obj」とファイル名の変数「filename」を指定して、関数「save_docx」を呼び出す。
3.ワードファイルの読み取り
次に、作成したワードファイルのデータ読み込みを行います。ワードファイルからのデータ読み込みは下記の順番で説明します。
- ワードファイルを読み取る関数の定義
- 定義した関数の実行
ワードファイルを読み取る関数の定義
ここでは、ワードデータ読み取りのために、「read_docx」という関数を定義します。既に作成されたワードファイルの名前の変数「file_name」を引数に取り、ワードファイルのすべてのパラグラフの文字列を配列「extracted_text」に格納して返却します。
# read docx
def read_docx(file_name):
extracted_text = []
doc = docx.Document(file_name)
for value in doc.paragraphs:
extracted_text.append(value.text)
return extracted_text
- 関数「read_docx」を定義宣言する。
- 変数「extracted_text」 を空のリストで初期化する。変数「doc」をライブラリ「docx」の関数「Document」からの戻り値で初期化する。
- 「doc.paragraphs」にある複数のパラグラフを1つずつ「value」に格納しながら、以下の処理を繰り返す。
- 変数「extracted_text」の関数「append」を呼び出す。
- 変数「extracted_text」を戻り値として返却する。
定義した関数の実行
最後に、上記で定義したワードを読み取る関数「read_docx」の呼び出しを行います。読み取るワードファイルは上記で作成した「test.docx」を対象しています。
if __name__ == '__main__':
# set file name
filename = 'test.docx'
# read docx
extracted_text = read_docx(file_name=filename)
print(extracted_text)
- 変数「filename」を文字列「test.docx」で初期化する。
- 変数「extracted_text」を関数「read_docx」に引数「filename」を指定した時の戻り値で初期化する。
- 変数「extracted_text」の内容を表示する。
Pythonで行うその他のofficeの操作方法
ワード(Word)ファイル以外にも、officeには、それぞれ異なる操作方法があります。
下記の記事では、普段の業務で使える、office(パワーポイント、エクセル、ワード)のPythonのプログラムによる操作方法を説明しています。
officeそれぞれの操作方法を、下記の記事を参考に、ご自身のプログラムを作成してみてください。
Pythonで業務効率化するその他の方法
この記事では、Pythonを使ったワード(Word)ファイルの作成方法と読み込み方法説明しました。
これによって、業務の中でワードを作成する機会があった場合に、あるデータに基づいて自動的にワードファイルを編集できることを説明しました。
ワード(Word)ファイルの作成方法と読み込み方法以外にも、Pythonには、業務効率化できる手段がたくさんあります。
下記の記事に、普段オフィス環境で使われるツールを使って業務効率化できる方法をまとめていますので、ぜひ合わせて読んで取り組んでみてください。