PythonでPowerPointプレゼンテーションから表を抽出する方法

PowerPointは広く使用されているプレゼンテーションツールであり、さまざまなデータレポートや分析結果の表示に利用されます。その中で、表はデータの関係を直感的かつ構造的に説明するための優れた方法です。しかし、データ分析、ドキュメントのアーカイブ、またはクロスプラットフォームでの共有の場面では、スライドの表機能が十分でないことがあります。このような場合、表を抽出して他のファイルに書き出す方が効率的です。表の内容をテキストやExcel形式に変換することで、データの迅速な流通と理解が促進され、自動化処理やさらなるデータマイニングにも便利です。Pythonを使用すれば、PowerPointプレゼンテーションから表を効率的かつ正確に抽出し、自動化も実現できます。本記事では、**Pythonを使用してPowerPointスライドから表を抽出し、表データをテキストファイルやExcelファイルに書き出す方法**を紹介します。

- **[PythonでPowerPointプレゼンテーションから表を抽出し、テキストファイルに書き出す](#pythonでpowerpointプレゼンテーションから表を抽出しテキストファイルに書き出す)**
- **[PythonでPowerPointプレゼンテーションから表を抽出し、Excelワークシートに書き出す](#pythonでpowerpointプレゼンテーションから表を抽出しexcelワークシートに書き出す)**

この記事で使用する表抽出方法は、[Spire.Presentation for Python](https://www.e-iceblue.com/Download/Spire-Presentation-Python.html)に基づいています。PyPIでインストール：`pip install Spire.Presentation`

[無料ライセンスの申請はこちら](https://www.e-iceblue.com/TemLicense.html)

## PythonでPowerPointプレゼンテーションから表を抽出し、テキストファイルに書き出す
このライブラリの`ITable`クラスは、プレゼンテーション内の表を表します。プレゼンテーション内のスライドを遍歴し、スライド内のすべてのコンテンツオブジェクト（`IShape`インスタンス）を遍歴して、それが`ITable`インスタンスかどうかを判断することで、すべての表を取得できます。表を取得した後、`ITable.TableRow[].TextFrame.Value`プロパティを使用してセルデータを取得し、表を抽出します。以下は操作手順です：
1. 必要なモジュールをインポートします。
2. `Presentation`インスタンスを作成し、`Presentation.LoadFromFile()`メソッドを使用してPowerPointファイルを読み込みます。
3. スライドを遍歴し、スライド内のコンテンツオブジェクトを遍歴して、それが`ITable`インスタンスかどうかを判断します。
4. `ITable`インスタンス内の行およびセルを遍歴し、`TableRow[].TextFrame.Value`を使用してセルデータを取得します。
5. セルデータを使用して文字列を構築し、テキストファイルに書き出します。
6. リソースを解放します。

**コード例**
```python
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プレゼンテーションから表を抽出しテキストファイルに書き出す](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/a09c6ff3-249d-93e4-9c06-a20363c0de4c.png)

## PythonでPowerPointプレゼンテーションから表を抽出し、Excelワークシートに書き出す
抽出した表データをテキストファイルに書き出すだけでなく、[Spire.XLS for Python](https://www.e-iceblue.com/Download/Spire-XLS-Python.html)（PyPIでインストール：`pip install Spire.XLS`）を使用してデータをExcelワークシートに書き出し、他の形式設定やファイル変換を行うこともできます。以下は操作手順です：
1. 必要なモジュールをインポートします。
2. `Presentation`インスタンスを作成し、`Presentation.LoadFromFile()`メソッドを使用してPowerPointファイルを読み込みます。
3. `Workbook`オブジェクトを作成して新しいExcelワークブックを作成し、`Workbook.Worksheets.Clear()`メソッドを使用してワークブックのデフォルトワークシートをクリアします。
4. スライドを遍歴し、スライド内のコンテンツオブジェクトを遍歴して、それが`ITable`インスタンスかどうかを判断します。`ITable`インスタンスをリストに追加します。
5. リスト内の`ITable`インスタンスを遍歴し、`Workbook.Worksheets.Add()`メソッドを使用して各`ITable`インスタンスのためにワークシートを作成します。
6. `ITable`インスタンス内の行およびセルを遍歴し、`TableRow[].TextFrame.Value`を使用してセルデータを取得し、`Worksheet.Range[].Value`プロパティを使用してデータを対応するセルに書き出します。
7. ワークシートの形式設定を行います。
8. Excelワークブックを保存するか、他の形式のファイルに変換します。
9. リソースを解放します。

**コード例**
```python
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でPPTの表を抽出しExcelワークシートに書き出す](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/0bf526b6-81ca-2e14-7c41-b4143f9d99b4.png)

この記事では、Pythonを使用してPowerPointプレゼンテーションから表データを抽出し、テキストファイルまたはExcelワークブックに書き出す方法を紹介しました。

詳細なPowerPointプレゼンテーション処理のテクニックについては、[Spire.Presentation for Pythonのチュートリアル](https://www.e-iceblue.com/Tutorials/Python/Spire.XLS-for-Python/Program-Guide/Spire.XLS-for-Python-Program-Guide-Content.html)をご覧ください。