Home » Python » pywin32・win32comの使用例など » pywin32でWordの表データを1行ずつリストに

pywin32でWordの表データを1行ずつリストに

動作検証バージョン:64bit Windows 10 Pro + 32bit Word(バージョン2008 ビルド13127.20408 Microsoft Store)+ Python 3.8.3 + pywin32 228

python-docxを使って表のデータを1行ずつリストにする、Pythonのコードをご紹介しています。

pywin32のwin32com.clientモジュールを使っても、もちろん同様の処理は可能です。

[スポンサードリンク]

Wordの表データを1行ずつリストにするサンプルスクリプト

Cドライブtempフォルダーに、表の存在するWordファイルsample.docxを用意して、以下のスクリプトを実行してみてください。

import win32com.client

wd_app = win32com.client.Dispatch('Word.Application')
wd_app.Visible = True

doc = wd_app.Documents.Open(r'C:\temp\sample.docx')

tbl = doc.Tables(1)
for row in tbl.Rows:
    values = []
    for cell in row.Cells:
        values.append(cell.Range.Text[:-2])
    print(values)

Wordが起動し、C:\temp\sample.docxが開かれ、1つ目の表のデータが、

['a1', 'b1', 'c1']
['a2', 'b2', 'c2']

のように、Pythonのリストとして取得できる様子を確認できます。

サンプルスクリプトで行っている処理

Wordの起動

最初の2行は、pywin32を使ってWordを利用する際の、お決まりのコードです。
  import win32com.client
  wd_app = win32com.client.Dispatch('Word.Application')

ここまでの実行で、Wordが非表示状態で起動し、変数wd_appにWordのApplicationオブジェクトへの参照が、

格納されます。

この後は、Word VBAによく似たコードと、Pythonのコードが混在していきます。

Wordの表示と文書のOpen

ApplicationオブジェクトのVisibleプロパティに、

論理値Trueを設定することで、Wordを表示し、
  wd_app.Visible = True

DocumentsコレクションのOpenメソッドで開いた、

C:\temp\sample.docxを、変数docに代入します。
  doc = wd_app.Documents.Open(r'C:\temp\sample.docx')

表の取得

Document.Tablesプロパティで取得した、

Tablesコレクションの、既定メンバーであるItemメソッドで取得した1つ目の表を、

変数tblに代入します。
  tbl = doc.Tables(1)

行に対するループ処理

Table.Rowsプロパティで取得した

Rowsコレクションに含まれるRowオブジェクトを、

for文で1行ずつ処理します。
  for row in tbl.Rows:

セルに対するループ処理

Row.Cellsプロパティで取得した、

Cellsコレクションから個々のセルを表すCellオブジェクトを取得して、

      for cell in row.Cells:

各セル内の文字列を、リストの要素としてappendメソッドで追加しています。
          values.append(cell.Range.Text[:-2])

セル内文字列の整理

セル内の文字列は、Cell.Rangeプロパティで取得した

RangeオブジェクトのTextプロパティで取得できるのですが、

末尾に改行コードと、セルの区切りを表す制御文字が含まれているため、スライスで末尾2文字を削除しています。
          values.append(cell.Range.Text[:-2])

末尾2文字を削除しない、
          values.append(cell.Range.Text)
の形で実行した場合は、

['a1\r\x07', 'b1\r\x07', 'c1\r\x07']
['a2\r\x07', 'b2\r\x07', 'c2\r\x07']

のように出力されます。

最終更新日時:2020-10-07 06:53

[スポンサードリンク]

Home » Python » pywin32・win32comの使用例など » pywin32でWordの表データを1行ずつリストに

TrackBack:0

TrackBack URL

Home » Python » pywin32・win32comの使用例など » pywin32でWordの表データを1行ずつリストに

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

.