PythonでExcelファイルからグラフや図形、画像を保存する

Excelファイルは、データ分析やプレゼンテーションにおいて重要なツールであり、複雑なグラフや図形などの非構造化データを含むことがあります。これらの視覚的な要素を再利用する必要がある場合、手動で一つ一つ取り出すのは効率が悪く、大規模なファイル処理には対応できません。Pythonを用いた自動化による一括保存は、手作業の制限を克服し、データ管理の標準化を大幅に向上させることができます。定期的に生成される可視化レポートのアーカイブや、部門間協力における要素の再利用、機械学習のトレーニングに必要な画像データセットの作成など、どの場面でも自動化スクリプトが要素の完全性と命名規則を確保します。本記事では、**Pythonを使用してExcelファイル内のグラフや図形を画像として保存する方法**について説明します。

- **[PythonでExcelファイル内のグラフを画像として保存](#pythonでexcelファイル内のグラフを画像として保存)**
- **[PythonでExcelファイル内のグラフシートを画像として保存](#pythonでexcelファイル内のグラフシートを画像として保存)**
- **[PythonでExcelファイル内の図形を画像として保存](#pythonでexcelファイル内の図形を画像として保存)**

本記事で使用する方法は、無料の[Free Spire.XLS for Python](https://jp.e-iceblue.com/introduce/introduce-free-xls-for-python.html)ライブラリを活用します。PyPI: `pip install spire.xls.free`

## PythonでExcelファイル内のグラフを画像として保存
ライブラリに含まれている`Workbook.SaveChartAsImage()`メソッドを使用すると、指定したワークシート内の特定のグラフまたはすべてのグラフを画像ストリームとして保存できます。その後、`Stream.Save()`メソッドを使用して画像ストリームをファイルとして保存し、Excelのグラフを画像ファイルとしてエクスポートできます。  
注意点として、グラフシート（グラフのみが含まれ、セルや他のデータがない特別なワークシート）は画像として保存できないため、別の方法で保存する必要があります。  
以下は操作手順の例です：
1. 必要なモジュールをインポート：`Workbook`。
2. `Workbook`オブジェクトを作成し、`Workbook.LoadFromFile()`でExcelファイルを読み込みます。
3. ワークブック内のワークシートを巡回し、`Workbook.Worksheets.get_Item()`メソッドでワークシートを取得します。
4. `Worksheet.Charts`プロパティを使ってワークシート内のすべてのグラフを取得します。
5. ワークシート内のグラフを巡回し、`Workbook.SaveChartAsImage()`メソッドでグラフを画像ストリームとして保存します。
6. `Stream.Save()`メソッドで画像ストリームをファイルに保存します。
7. リソースを解放します。

**コード例**
```python
from spire.xls import Workbook

# Workbookオブジェクトを作成
workbook = Workbook()

# Excelファイルを読み込む
workbook.LoadFromFile("Sample.xlsx")

# Excelファイル内のワークシートを繰り返し処理
for i in range(workbook.Worksheets.Count):
    # ワークシートを取得
    worksheet = workbook.Worksheets.get_Item(i)
    # ワークシート内のグラフを繰り返し処理
    for j in range(worksheet.Charts.Count):
        # グラフを画像として保存
        image = workbook.SaveChartAsImage(worksheet, j)
        # 画像をファイルに保存
        image.Save(f"output/Images/Sheet{i}_Chart{j}.png")

workbook.Dispose()
```

結果
![2025-02-28_171255.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/3fef67ac-975e-4e26-bec2-4b86d0dab9b2.png)

## PythonでExcelファイル内のグラフシートを画像として保存
`Workbook.ChartSheets`プロパティを使用してワークブック内のすべてのグラフシートを取得し、`Workbook.SaveChartAsImage()`メソッドでグラフシート内のグラフを画像ストリームとして保存した後、ファイルとして保存します。  
以下は操作手順の例です：
1. 必要なモジュールをインポート：`Workbook`。
2. `Workbook`オブジェクトを作成し、`Workbook.LoadFromFile()`でExcelファイルを読み込みます。
3. `Workbook.ChartSheets`プロパティを使用してすべてのグラフシートを取得します。
4. グラフシートを巡回し、`Workbook.SaveChartAsImage()`メソッドでグラフシート内のグラフを画像ストリームとして保存します。
5. `Stream.Save()`メソッドで画像ストリームをファイルに保存します。
6. リソースを解放します。

**コード例**
```python
from spire.xls import Workbook, XlsShape

# Workbookオブジェクトを作成
workbook = Workbook()

# Excelファイルを読み込む
workbook.LoadFromFile("Sample.xlsx")

# Excelファイル内のグラフワークシートを繰り返し処理
for i in range(len(workbook.Chartsheets)):
    # グラフワークシートを取得
    sheet = workbook.Chartsheets[i]
    # グラフワークシートを画像ストリームとして保存
    image = workbook.SaveChartAsImage(sheet)
    # 画像ストリームを画像ファイルとして保存
    image.Save(f"output/Images/{sheet.Name}.png")

workbook.Dispose()
```

結果
![2025-02-28_171539.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/e8b2cbe7-f86f-4d09-8170-a31132e63821.png)

## PythonでExcelファイル内の図形を画像として保存
`Worksheet.PrstGeomShapes`プロパティを使用してワークシート内のすべての図形を取得し、各図形を`XlsShape`オブジェクトに変換し、`XlsShape.SaveToImage()`メソッドで画像ストリームとして保存します。その後、画像をファイルとして保存します。  
以下は操作手順の例です：
1. 必要なモジュールをインポート：`Workbook`。
2. `Workbook`オブジェクトを作成し、`Workbook.LoadFromFile()`でExcelファイルを読み込みます。
3. ワークブック内のワークシートを巡回し、`Workbook.Worksheets.get_Item()`メソッドでワークシートを取得します。
4. `Worksheet.PrstGeomShapes`プロパティでワークシート内のすべての図形を取得します。
5. 各図形を`XlsShape`オブジェクトに変換し、`XlsShape.SaveToImage()`メソッドで画像ストリームとして保存します。
6. `Stream.Save()`メソッドで画像ストリームをファイルに保存します。
7. リソースを解放します。

**コード例**
```python
from spire.xls import Workbook, XlsShape

# Workbookオブジェクトを作成
workbook = Workbook()

# Excelファイルを読み込む
workbook.LoadFromFile("Sample.xlsx")

# Excelファイル内のワークシートを繰り返し処理
for i in range(workbook.Worksheets.Count):
    # ワークシートを取得
    worksheet = workbook.Worksheets.get_Item(i)
    # ワークシート内の図形を繰り返し処理
    for j in range(worksheet.PrstGeomShapes.Count):
        # 図形を取得
        shape = worksheet.PrstGeomShapes.get_Item(j)
        # 図形をXlsShapeオブジェクトに変換
        xlsShape = XlsShape(shape)
        # 図形を画像ストリームとして保存
        image = xlsShape.SaveToImage()
        # 画像ストリームをファイルに保存
        image.Save(f"output/Images/Sheet{i}_Shape{j}.png")

workbook.Dispose()
```

結果
![2025-02-28_171757.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/196177d5-3ec1-4df2-8258-c82ec1fae359.png)

本記事では、Pythonを使用してExcelファイル内のグラフ、図形、およびグラフシートを画像ファイルとして保存する方法について解説しました。