Pythonを使用してExcelデータを読み込み、PowerPointスライドでグラフを作成する方法

データの可視化は、プレゼンテーションの専門性を向上させるための重要な要素の一つです。Pythonを使用してExcelデータを読み込み、PowerPointスライドでグラフを作成することで、グラフ作成のプロセスを大幅に簡略化し、データの正確性とグラフの即時性を確保することができます。Pythonを介することで、データの自動処理とグラフ生成を簡単に実現し、プレゼンテーションの質と効率を向上させることができます。この記事では、**Pythonを使用してExcelデータを読み込み、PowerPointプレゼンテーションでグラフを作成する方法**、および**Excelのグラフを画像としてスライドに挿入する方法**を紹介します。

- **[Excelデータを読み込んでPowerPointスライドでグラフを作成する](#excelデータを読み込んでpowerpointスライドでグラフを作成する)**
- **[Excelのグラフを画像としてPowerPointスライドに挿入する](#excelのグラフを画像としてpowerpointスライドに挿入する
)**

この記事で紹介する方法では、[Spire.Presentation for Python](https://jp.e-iceblue.com/download/spire-presentation-python.html)と[Spire.XLS for Python](https://jp.e-iceblue.com/download/spire-xls-for-python.html)を使用します。PyPIでインストールできます：`pip install Spire.Presentation Spire.XLS`。

[無料ライセンスを申請する](https://www.e-iceblue.com/TemLicense.html)

## Excelデータを読み込んでPowerPointスライドでグラフを作成する
Excelワークシートのデータを読み込み、そのデータを使ってスライド上にグラフを作成し、軸設定を行うことで、PowerPointでのデータ可視化を実現できます。
操作手順の例：
1. 必要なモジュールをインポートします。
2. `Presentation`インスタンスを作成し、`Presentation.SlideSize.Type`プロパティを使用してスライドサイズを設定します。
3. `Workbook`インスタンスを作成し、`Workbook.LoadFromFile()`メソッドでExcelファイルを読み込みます。
4. `ISlide.Shapes.AppendChart()`メソッドを使用して、デフォルトのスライドにグラフを作成し、`IChart.ChartData.Clear(0, 0, 5, 5)`メソッドでサンプルデータをクリアします。
5. `Worksheet.AllocatedRange[].Text`を使用してヘッダーと列ヘッダーのテキストを読み取り、`IChart.ChartData[].Text`プロパティでグラフデータのヘッダーと列ヘッダーとして設定します。
6. ワークシートのデータ行とデータ列をループし、`Worksheet.AllocatedRange[].NumberValue`プロパティでデータを読み取り、`IChart.ChartData[].NumberValue`で対応するセルのデータとして設定します。
7. `IChart.ChartTitle`プロパティを使用してグラフのタイトルを設定します。
8. `IChart.Series.SeriesLabel`および`IChart.Categories.CategoryLabels`を使用して、グラフの系列とカテゴリの対応するセル範囲を設定します。
9. `IChart.Series.get_Item().Values`で系列に対応するデータセル範囲を設定します。
10. `Worksheet.AllocatedRange[].NumberFormat`プロパティでExcelのデータセルの数字フォーマットを読み取り、`IChart.PrimaryValueAxis.NumberFormat`でグラフの縦軸の数字フォーマットとして設定します。
11. グラフの重なり具合や間隔の幅を設定します。
12. `Presentation.SaveToFile()`でプレゼンテーションを保存します。
13. リソースを解放します。

**コードの例**
```python
from spire.presentation import Presentation, FileFormat, SlideSizeType, RectangleF, ChartType, ChartStyle, FillFormatType
from spire.xls import Workbook

# Presentationのインスタンスを作成
presentation = Presentation()

# スライドサイズを設定
presentation.SlideSize.Type = SlideSizeType.Screen16x9

# Workbookのインスタンスを作成
workbook = Workbook()
# Excelファイルをロード
workbook.LoadFromFile("Sample.xlsx")

# 最初のワークシートを取得
sheet = workbook.Worksheets.get_Item(0)

# 最初のスライドにチャートを追加
rect = RectangleF.FromLTRB(50, 100, presentation.SlideSize.Size.Width - 50, presentation.SlideSize.Size.Height - 50)
slide = presentation.Slides.get_Item(0)
chart = slide.Shapes.AppendChart(ChartType.Area, rect)

# デフォルトのダミーデータをクリア
chart.ChartData.Clear(0, 0, 5, 5)

# ワークシートからヘッダー列とヘッダー行をチャートにコピー
for i in range(sheet.AllocatedRange.ColumnCount):
    chart.ChartData[0, i].Text = sheet.AllocatedRange[1, i + 1].Text
for j in range(sheet.AllocatedRange.RowCount - 1):
    chart.ChartData[j + 1, 0].Text = sheet.AllocatedRange.get_Item(j + 2, 1).Text

# データ行を繰り返し処理
for k in range(sheet.AllocatedRange.RowCount - 1):
    # データ列を繰り返し処理
    for l in range(sheet.AllocatedRange.ColumnCount - 1):
        # チャートデータを設定
        chart.ChartData[k + 1, l + 1].NumberValue = sheet.AllocatedRange[k + 2, l + 2].NumberValue

# チャートタイトルを設定
chart.ChartTitle.TextProperties.Text = sheet.Name
chart.ChartTitle.TextProperties.IsCentered = True
chart.ChartTitle.Height = 30
chart.HasTitle = True

# シリーズラベルとカテゴリラベルを設定
chart.Series.SeriesLabel = chart.ChartData["B1", "C1"]
chart.Categories.CategoryLabels = chart.ChartData["A2", "A" + str(sheet.AllocatedRange.RowCount)]

# シリーズの値を設定
chart.Series.get_Item(0).Values = chart.ChartData["B2", "B" + str(sheet.AllocatedRange.RowCount)]
chart.Series.get_Item(1).Values = chart.ChartData["C2", "C" + str(sheet.AllocatedRange.RowCount)]

# データ軸の数値形式を設定
chart.PrimaryValueAxis.NumberFormat = sheet.AllocatedRange[2, 2].NumberFormat

# チャートスタイルを設定
chart.ChartStyle = ChartStyle.Style5

# 重なりとギャップ幅を設定
chart.OverLap = 50
chart.GapWidth = 200

# プレゼンテーションを保存
presentation.SaveToFile("output/PresentationChartFromExcelData.pptx", FileFormat.Pptx2019)
presentation.Dispose()
workbook.Dispose()
```

結果のプレゼンテーション
![Excelデータを読み込んでPowerPointスライドでグラフを作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/9334cc21-a608-0b24-d3a4-96612e61a23c.png)

## Excelのグラフを画像としてPowerPointスライドに挿入する
既存のExcelグラフをPowerPointプレゼンテーションに挿入し、元のフォーマットと外観を最大限に維持するには、Excelグラフを画像としてスライドに挿入する方法が有効です。
操作の例：
1. 必要なモジュールをインポートします。
2. `Presentation`インスタンスを作成し、スライドサイズを設定します。
3. `Workbook`インスタンスを作成し、`Workbook.LoadFromFile()`メソッドでExcelファイルを読み込みます。
4. `Workbook.Worksheets.get_Item()`メソッドを使用して、最初のワークシートを取得します。
5. `Workbook.SaveChartAsImage(worksheet, 0).ToArray()`メソッドで、ワークシートの最初のグラフを配列として保存し、画像ストリームに変換します。
6. `Presentation.Images.AppendStream()`メソッドで画像ストリームをプレゼンテーションに埋め込みます。
7. `ISlide.Shapes.AppendEmbedImageByImageData()`メソッドで画像をスライドに挿入します。
8. `Presentation.SaveToFile()`メソッドでプレゼンテーションを保存します。
9. リソースを解放します。

**コードの例**
```python
from spire.presentation import Presentation, FileFormat, SlideSizeType, RectangleF, ShapeType, Stream
from spire.xls import Workbook

# Presentationのインスタンスを作成
presentation = Presentation()

# スライドサイズを設定
presentation.SlideSize.Type = SlideSizeType.Screen16x9

# Workbookのインスタンスを作成
workbook = Workbook()
# Excelファイルをロード
workbook.LoadFromFile("G:/Documents/Sample18.xlsx")

# 最初のワークシートを取得
worksheet = workbook.Worksheets.get_Item(0)

# 最初のワークシートの最初のチャートを画像として保存
imageStream = Stream(workbook.SaveChartAsImage(worksheet, 0).ToArray())

# プレゼンテーションに画像を埋め込む
imageData = presentation.Images.AppendStream(imageStream)

# 最初のスライドを取得
slide = presentation.Slides.get_Item(0)

# スライドに画像シェイプを追加
rect = RectangleF.FromLTRB(50, 100, presentation.SlideSize.Size.Width - 50, presentation.SlideSize.Size.Height - 50)
slide.Shapes.AppendEmbedImageByImageData(ShapeType.Rectangle, imageData, rect)

# プレゼンテーションを保存
presentation.SaveToFile("output/InsertExcelChartToPresentation.pptx", FileFormat.Pptx2019)
presentation.Dispose()
workbook.Dispose()
```

結果のプレゼンテーション
![Excelのグラフを画像としてPowerPointスライドに挿入](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/b79fd538-9346-b2aa-865b-a54a8120bffd.png)

この記事では、Pythonを使用してExcelデータを読み込み、PowerPointプレゼンテーションでグラフを作成する方法、およびExcelのグラフを画像としてスライドに挿入する方法を紹介しました。

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