Home » Python » python-docxの使い方 » python-docxでも表内テキストを2重ループを使わず取得できる

python-docxでも表内テキストを2重ループを使わず取得できる

動作検証バージョン:64bit版 Windows 10 Pro + Python 3.8.0 + python-docx 0.8.10

python-docxを使って、Word文書内の表データを1行ずつリストにできることをご紹介しました。

python-pptxでできたように、2重ループを使わずに表内文字列の取得がWordでも可能なのかが気になり、試してみました。

[スポンサードリンク]

Word文書の表内テキストを取得するサンプル

Wordの場合、以下のようなスクリプトで、表内文字列を取得できます。

import docx

doc = docx.Document(r'c:\temp\foo.docx')
tbl = doc.tables[0]

for cell in tbl._cells:
    print(cell.text)

表の存在するWord文書を、Cドライブtempフォルダーにfoo.docxとして保存した状態で上記スクリプトを実行すると、表内文字列を取得できる様子が確認できます。

表内テキストを取得するサンプルで行っている処理

アンダーバー1個で始まる属性名のため少々気になりますけれど、Tableオブジェクトの_cells属性を使うと、
  for cell in tbl._cells:
>>> dir(tbl)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_cells', '_column_count', '_element', '_parent', '_tbl', '_tblPr', 'add_column', 'add_row', 'alignment', 'autofit', 'cell', 'column_cells', 'columns', 'part', 'row_cells', 'rows', 'style', 'table', 'table_direction']

_Cellオブジェクトを要素として持つリストを取得できます。
>>> type(tbl._cells)
<class 'list'>

for文で取得した各_Cellオブジェクトのtext属性を取得しているのが、
      print(cell.text)

上記のスクリプトです。

最終更新日時:2020-03-25 10:32

[スポンサードリンク]

Home » Python » python-docxの使い方 » python-docxでも表内テキストを2重ループを使わず取得できる

「python-docxの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.