PowerPointは広く使用されているプレゼンテーションツールであり、さまざまなデータレポートや分析結果の表示に利用されます。その中で、表はデータの関係を直感的かつ構造的に説明するための優れた方法です。しかし、データ分析、ドキュメントのアーカイブ、またはクロスプラットフォームでの共有の場面では、スライドの表機能が十分でないことがあります。このような場合、表を抽出して他のファイルに書き出す方が効率的です。表の内容をテキストやExcel形式に変換することで、データの迅速な流通と理解が促進され、自動化処理やさらなるデータマイニングにも便利です。Pythonを使用すれば、PowerPointプレゼンテーションから表を効率的かつ正確に抽出し、自動化も実現できます。本記事では、Pythonを使用してPowerPointスライドから表を抽出し、表データをテキストファイルやExcelファイルに書き出す方法を紹介します。
この記事で使用する表抽出方法は、Spire.Presentation for Pythonに基づいています。PyPIでインストール:pip install Spire.Presentation
PythonでPowerPointプレゼンテーションから表を抽出し、テキストファイルに書き出す
このライブラリのITable
クラスは、プレゼンテーション内の表を表します。プレゼンテーション内のスライドを遍歴し、スライド内のすべてのコンテンツオブジェクト(IShape
インスタンス)を遍歴して、それがITable
インスタンスかどうかを判断することで、すべての表を取得できます。表を取得した後、ITable.TableRow[].TextFrame.Value
プロパティを使用してセルデータを取得し、表を抽出します。以下は操作手順です:
- 必要なモジュールをインポートします。
-
Presentation
インスタンスを作成し、Presentation.LoadFromFile()
メソッドを使用してPowerPointファイルを読み込みます。 - スライドを遍歴し、スライド内のコンテンツオブジェクトを遍歴して、それが
ITable
インスタンスかどうかを判断します。 -
ITable
インスタンス内の行およびセルを遍歴し、TableRow[].TextFrame.Value
を使用してセルデータを取得します。 - セルデータを使用して文字列を構築し、テキストファイルに書き出します。
- リソースを解放します。
コード例
from spire.presentation import *
from spire.presentation.common import *
# Presentation のインスタンスを作成
presentation = Presentation()
# PowerPoint ファイルを読み込む
presentation.LoadFromFile("サンプル.pptx")
tables = []
# すべてのスライドを反復処理
for slide in presentation.Slides:
# すべてのシェイプを反復処理
for shape in slide.Shapes:
# シェイプがテーブルかどうかを確認
if isinstance(shape, ITable):
tableData = ""
# すべての行を反復処理
for row in shape.TableRows:
rowData = ""
# 行内のすべてのセルを反復処理
for i in range(0, row.Count):
# セルの値を取得
cellValue = row[i].TextFrame.Text
rowData += (cellValue + "\t" if i < row.Count - 1 else cellValue)
tableData += (rowData + "\n")
tables.append(tableData)
# テーブルをテキストファイルに書き込む
for idx, table in enumerate(tables, start=1):
fileName = f"output/Tables/Table-{idx}.txt"
with open(fileName, "w") as f:
f.write(table)
presentation.Dispose()
PythonでPowerPointプレゼンテーションから表を抽出し、Excelワークシートに書き出す
抽出した表データをテキストファイルに書き出すだけでなく、Spire.XLS for Python(PyPIでインストール:pip install Spire.XLS
)を使用してデータをExcelワークシートに書き出し、他の形式設定やファイル変換を行うこともできます。以下は操作手順です:
- 必要なモジュールをインポートします。
-
Presentation
インスタンスを作成し、Presentation.LoadFromFile()
メソッドを使用してPowerPointファイルを読み込みます。 -
Workbook
オブジェクトを作成して新しいExcelワークブックを作成し、Workbook.Worksheets.Clear()
メソッドを使用してワークブックのデフォルトワークシートをクリアします。 - スライドを遍歴し、スライド内のコンテンツオブジェクトを遍歴して、それが
ITable
インスタンスかどうかを判断します。ITable
インスタンスをリストに追加します。 - リスト内の
ITable
インスタンスを遍歴し、Workbook.Worksheets.Add()
メソッドを使用して各ITable
インスタンスのためにワークシートを作成します。 -
ITable
インスタンス内の行およびセルを遍歴し、TableRow[].TextFrame.Value
を使用してセルデータを取得し、Worksheet.Range[].Value
プロパティを使用してデータを対応するセルに書き出します。 - ワークシートの形式設定を行います。
- Excelワークブックを保存するか、他の形式のファイルに変換します。
- リソースを解放します。
コード例
from spire.presentation import *
from spire.presentation.common import *
from spire.xls import *
from spire.xls.common import *
# Presentation のインスタンスを作成
presentation = Presentation()
# PowerPoint ファイルを読み込む
presentation.LoadFromFile("サンプル.pptx")
# Excel ファイルを作成し、デフォルトのワークシートをクリア
workbook = Workbook()
workbook.Worksheets.Clear()
tables = []
# すべてのスライドを反復処理
for slide in presentation.Slides:
# すべてのシェイプを反復処理
for shape in slide.Shapes:
# シェイプがテーブルかどうかを確認
if isinstance(shape, ITable):
tables.append(shape)
# すべてのテーブルを反復処理
for t in range(len(tables)):
table = tables[t]
sheet = workbook.Worksheets.Add(f"Sheet-{t+1}")
for i in range(0, table.TableRows.Count):
row = table.TableRows[i]
for j in range(0, row.Count):
sheet.Range[i + 1, j + 1].Value = row[j].TextFrame.Text
# 行と列を自動調整
sheet.AllocatedRange.Style.Font.FontName = "Yu Gothic Medium"
sheet.AllocatedRange.Style.Font.Size = 12.0
sheet.AllocatedRange.AutoFitColumns()
sheet.AllocatedRange.AutoFitRows()
# Excel ファイルを保存
workbook.SaveToFile("output/PresentationTables.xlsx", FileFormat.Version2016)
presentation.Dispose()
workbook.Dispose()
この記事では、Pythonを使用してPowerPointプレゼンテーションから表データを抽出し、テキストファイルまたはExcelワークブックに書き出す方法を紹介しました。
詳細なPowerPointプレゼンテーション処理のテクニックについては、Spire.Presentation for Pythonのチュートリアルをご覧ください。