【悩み】
・PythonでWord内のテーブル(表)を抽出したい。
・Word内のテーブルからセル値を取得したい。
・Word内の表をExcelに転記するPythonプログラムを作りたい。
こういった「悩み」に答えます。
【本記事の内容】
① Wordからテーブル抽出できるPythonライブラリ
➁ 事前準備:各種インストールとWordの構造理解
➂ PythonでWordからテーブルを抽出:2つの事例
本記事に掲載した方法を実践したことで、Pythonを使ってWord文書(docxやdocファイル)からテーブルを取り出すことができました(下の動画参照)。
記事の前半では「Wordからテーブル抽出するために使えるPythonライブラリの一覧」について解説します。
記事の後半では「ライブラリのインストール方法などの環境準備」と「Wordからテーブルを抽出するPythonプログラム」を説明します。
この記事を読み終えることで、「Wordファイルを開かずに記載されたテーブルのデータを取り出せる」状態になります。
ちなみに、「新規作成」「編集」「変換」といった操作もPythonで実施できます。以下の記事にまとめているので興味がある方は是非ご覧ください。
Wordからテーブル抽出できるPythonライブラリ
PythonでWordからテーブルを抽出したい場合、「python-docx」ライブラリを使います。
以下の記事でライブラリのライセンスや概要をご紹介しています。気になる方は、ぜひ読んでみてください。
>>【5分でわかる】PythonでWordを新規作成する方法
以降で、Wordからテーブル抽出のための環境準備を説明します。Pythonやライブラリのインストール手順を丁寧に解説しますね。
事前準備:各種インストールとWordの構造理解
「PythonでWordからテーブル抽出するための準備」に関してご紹介します。
【流れ】
手順1:Pythonのインストール
手順2:python-docxのインストール
手順3:Word文書のオブジェクト構造
上記の流れで説明します。
Pythonのインストール
以下の記事を参考にし、お使いのパソコンやサーバーにPythonをインストールしましょう。
>> 【ubuntu向け】pyenvでPythonをインストールする手順【簡単】
>> 【コピペOK】pyenvでPythonをインストールする手順【Linux用】
>> 【最短5分】PyAutoGUIをWindowsにインストールする手順の「手順1:Pythonのインストール」を参照
>> 【環境構築】インストーラーでMacOSにPythonをインストール
python-docxのインストール
python-docxライブラリのインストール手順に関しては、以下の記事の「python-docxとbayoo-docxのインストール」箇所をご覧ください。
>>【5分でわかる】PythonでWordを新規作成する方法
Word文書のオブジェクト構造
Word文書は、以下のWordprocessingML(略称:WML)という言語で作成されます。WMLの構造を把握しておくことで、Pythonで細かいWord操作を実現できます。
WMLの詳細に関しては、以下の記事の「Word文書のオブジェクト構造」箇所をご覧ください。
>>【5分でわかる】PythonでWordを新規作成する方法
以下の図に、WMLのテーブル関係のオブジェクト構造をまとめました。以下の図を押さえておくことで、プログラムの理解スピードが向上します。
ちなみに、以下の図は、「Microsoftのリファレンス」と「WMLのドキュメント」を確認し作成しました。
>> テーブルのオブジェクト構造(Microsoftのリファレンス)
>> セル(Cells)のオブジェクトの構造(WMLのドキュメント)
>> 行(Rows)のオブジェクトの構造(WMLのドキュメント)
以降で、Pythonを使ってWordからテーブルのデータを抽出するプログラムとその実行結果を解説します。
PythonでWordからテーブルを抽出:2つの事例
「PythonでWordからテーブルを抽出する方法」に関してご紹介します。
【ご紹介事項】
・テーブルおよびセル値を抽出:tables変数
・応用例:Word内の表をExcelに転記
以降で、以下「sample-for-extract-table.docx」のWordファイルを用いて、上記の各項目に関して説明します。
テーブルおよびセル値を抽出:tables変数
「Wordからテーブルのセル値を抽出する」プログラムは、以下となります。
import docx
# 対象のワードファイルのPATH
word_path = './sample-for-extract-table.docx'
# ワードファイルの読み込み
doc = docx.Document(word_path)
# テーブル情報を取得
now_count = 1
for table in doc.tables:
print(f'{now_count}番目のテーブル情報')
for row in table.rows:
for cell in row.cells:
# セル値を出力
print(cell.text)
now_count += 1
上記のプログラムを「extract-table.py」というファイル名で保存しましょう。
【変数について】
・tables変数
概要:Wordに記載された全テーブルがリスト形式で格納されている
使い方:Document型の変数.tables
・rows変数
概要:各テーブルの行の情報がリスト形式で格納されている
使い方:table型の変数.rows
・cells変数
概要:行ごとの列の情報がリスト形式で格納されている
使い方:row型の変数.cells
・補足
for文などの繰り返し構文を使うことで格納された全ての情報を出力できる
・参照
tablesのリファレンス(公式サイト)
以下のコマンドで、上記プログラムを実行できます。
python extract-table.py
その結果、以下のようにWordからテーブルを取得できます(下の動画参照)。
応用例:Word内の表をExcelに転記
先ほど紹介したプログラムの応用例として、下の図のように「Word内の表をExcelに転記」があります。
上の処理をプログラムにすると、以下となります。
import docx
import xlsxwriter
# Wordファイルを読み込む
document = docx.Document(r'./sample-for-extract-table.docx')
# 表の転記先になるExcelファイルのPATH
wb = xlsxwriter.Workbook(r'./sample.xlsx')
# Wordに記載されたテーブルの数だけ繰り返す
for table in document.tables:
ws_new = wb.add_worksheet() # Excelにシートを追加
index_row = 0
for row in table.rows: # 表の行だけ繰り返す
for x, cell in enumerate(row.cells):
ws_new.write(index_row, x, cell.text) # Excelへ表のセル値を記入
index_row += 1
wb.close()
上記のプログラムを「copy-table-docx-to-xlsx.py」というファイル名で保存しましょう。
以下のコマンドで、上記プログラムを実行できます。
python copy-table-docx-to-xlsx.py
その結果、以下のようにWord内のテーブルをExcelにコピーできます(下の動画参照)。
上記のようにpython-docxライブラリを使うことで、Wordからテーブルを抽出できます。
Pythonを使うことで、Word文書からテーブルを抽出できることを説明しました。このPythonを使うことで、あらゆる業務や作業を自動化できます。
その事例やヒントを知りたい方には、以下の本がオススメです。
ちなみに、上記教材の詳細なレビューに関しては、以下のサイトにまとめています。
>> 「退屈なことはPythonにやらせよう」のレビューの一覧
【まとめ】PythonでWordからテーブルを抽出:応用例も解説
いかがでしたでしょうか?
上記で紹介したpython-docxライブラリを使うことで、PythonでWord文書からテーブルを抽出できます。
最後にもう一度内容を確認しましょう。
【おさらい】
・PythonでWordからテーブルを抽出したい場合、python-docxを使う
・表のセル値を取得したい場合、tables変数、rows変数、cells変数を使う
・テーブル抽出の応用例として、「Excelへの転記」がある
ちなみに、「新規作成」「編集」「変換」といった操作もPythonで実施できます。以下の記事にまとめているので興味がある方は是非ご覧ください。
本ブログでは、「業務の時短化に繋がるIT技術」や「クラウドやOSSの学び方」などを発信しています。定期的に更新していますので、ぜひブックマークをよろしくお願いいたします。
コメント