動作検証バージョン:64bit版 Windows 10 Pro + Python 3.8.0 + python-docx 0.8.10
Word文書内の表を、行ごとにPythonのリストにするというニーズのほうが多そうですけれど、列ごとにリストにしたいという場合もあるでしょう。
[スポンサードリンク]
Wordの表データを1行ずつリストにするサンプル
以下のスクリプトで、Cドライブtempフォルダーに存在するfoo.docxファイルの1つ目の表データを、列ごとにリストにできる様子を確認できます。
import docx
values = []
for cell in col.cells:
values.append(cell.text)
print(values)
doc = docx.Document(r'c:\temp\foo.docx')
tbl = doc.tables[0]
values = []
for cell in col.cells:
values.append(cell.text)
print(values)
2重ループの部分は、リスト内包表記を使えば、以下のとおりです。
for col in tbl.columns:
values = [ cell.text for cell in col.cells ]
print(values)
values = [ cell.text for cell in col.cells ]
print(values)
サンプルスクリプトで行っている処理
上記のスクリプトで行っている処理は、もちろん行ごとにリストを作成するスクリプトとよく似ています。
行を表すオブジェクトを取得していた部分が、列を表すオブジェクトになっている点だけが異なります。
for col in tbl .columns:
>>> type(tbl.columns)
<class 'docx.table._Columns'>
すべての列を表す_Columnsオブジェクトから、for文で各列を表す_Columnオブジェクトを取得して、変数colに代入してます。
for col in tbl.columns:
内側のfor文では、_Columnオブジェクトに用意されているcells属性で、個々のセルを表す_Cellオブジェクトを要素として持つ、タプルを取得しています。
for cell in col.cells:
>>> type(col.cells)
<class 'tuple'>
この後の処理は、行ごとにリストにするスクリプトの場合と同じです。
[スポンサードリンク]
Home » Python » python-docxの使い方 » python-docxでWordの表データを1列ずつリストに