Home » Python » python-pptxの使い方 » python-pptxで表のデータを1行ずつリストに

python-pptxで表のデータを1行ずつリストに

動作検証バージョン:64bit版のWindows 10 + Python 3.7.3 + python-pptx 0.6.18

python-pptxを使えば、表内のテキスト(文字列)を2重ループにしなくても取得できることをご紹介しました。

表内文字列をただ取得するだけなら、この方法が簡単ですけれど、PythonからPowerPointファイルを操作する場合、1行ずつリストにしたいというケースが多そうに感じます。

[スポンサードリンク]

表を1行ずつリストにするサンプル

Cドライブtempフォルダーに存在するfoo.pptxの、先頭スライドの2つ目の図形に表が存在するとき、以下のスクリプトで、1行ずつをリストとして取得できることを確認できます。

import pptx

prs = pptx.Presentation(r'C:\temp\foo.pptx')
tbl = prs.slides[0].shapes[1].table

for row in tbl.rows:
    values = []
    for cell in row.cells:
        values.append(cell.text)
    print(values)
リスト内包表記を使えば、2重になっているfor文は
for row in tbl.rows:
    values = [ cell.text for cell in row.cells ]
    print(values)

のように、よりシンプルに書けます。

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

Tableオブジェクトのrows属性で、表内のすべての行を表す_RowCollectionオブジェクトを取得できます。
  for row in tbl.rows:

for文で、_RowCollectionオブジェクトから、各行を表す_Rowオブジェクトを順番に取得して、変数rowに格納します。
  for row in tbl.rows:

取得した_Rowオブジェクトのcells属性で、行内のすべてのセルを表す_CellCollectionオブジェクトを取得して、
      for cell in row.cells:

_CellCollectionオブジェクトから、各セルを表す_Cellオブジェクトを取得して、変数cellに格納します。
      for cell in row.cells:

append()で、リストvaluesに、
          values.append(cell.text)

_Cellオブジェクトのtext属性で取得したセル内の文字列を追加しています。
          values.append(cell.text)

最終更新日時:2019-11-07 03:06

[スポンサードリンク]

Home » Python » python-pptxの使い方 » python-pptxで表のデータを1行ずつリストに

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

検索


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

.