【Copilot Studio】コードインタープリターで.pptx/.xlsxをゼロから生成してみた

【Copilot Studio】コードインタープリターで.pptx/.xlsxをゼロから生成してみた

Copilot Studioのコードインタープリターで、テンプレートなしに編集可能な本物の.pptx/.xlsxをゼロから生成する方法を、実機検証をもとに紹介します。差し込み方式との違いやネイティブグラフの活用法も解説。
2026.06.23

はじめに

こんにちは、けーまです。

前回は、Word テンプレートのプレースホルダーに値を差し込んでレポートを生成しました。
これはテンプレートの穴を埋める方式で、Word に限った話です。
では、PowerPoint や Excel を、しかも編集できるネイティブのグラフ付きで作りたいときはどうするか、というのが本記事のテーマです。

そこで本記事では、コードインタープリター(Python実行)で、テンプレートなしに本物の .pptx / .xlsx をゼロから生成できるかを取り上げ、2026年6月時点で実機検証しました。
生成されたファイルが、画像を貼っただけのものではなく、Excel で開いて編集できる本物のファイルなのかも確認します。
PowerPoint や Excel の資料生成まで自動化したい方の参考にしていただければと思います。

本記事は、Copilot Studio でエージェントを作るシリーズの第10回です。
シリーズ全体では「収集 → 集計 → グラフ → 示唆 → 資料化」を一気通貫で行うエージェントを目指しており、本記事はその「資料化(PowerPoint / Excel)」を扱います。

対象読者:Copilot Studio で、編集可能な PowerPoint / Excel の資料を自動生成したい方

シリーズ記事一覧

テーマ 記事
第1回 最初のエージェント 初めてのエージェントを作ってみた
第2回 ナレッジ ナレッジでファイルに基づく回答を試してみた
第3回 トピック・ツール・フロー トピック・ツール・エージェントフローで「動き」を作り込む
第4回 テンプレート・自律トリガー・マルチエージェント テンプレート・自律トリガー・マルチエージェントで構成を広げてみた
第5回 収集(データの渡し方) 集計用のKPIデータをエージェントに持たせる方法を比べてみた
第6回 集計 KPIの集計をLLMに任せず決定論的にやってみた
第7回 グラフ KPIをチャット内でグラフ表示してみた
第8回 示唆 集計した数値から示唆を生成してみた
第9回 資料化(Word) テンプレートに数値を差し込んでWordレポートを自動生成してみた
第10回 資料化(PowerPoint / Excel) (本記事)

1. 今回やること

コードインタープリターに、本物の PowerPoint / Excel をゼロから生成させます。

  • コードインタープリターで .xlsx を生成し、編集可能なネイティブの棒グラフを埋め込む
  • コードインタープリターで .pptx を生成する

検証には、これまでの回と同じ架空の SaaS 企業3社(CloudNova / StreamForge / Datapeak)の2025年のARR集計値(CloudNova 1,950 / StreamForge 1,300 / Datapeak 2,810・架空)を使います。

2. 差し込みとネイティブ生成の違い

前回(Word)と本記事(PowerPoint / Excel)は、ファイルの作り方が違います。

観点 前回:Document output(差し込み) 本記事:コードインタープリター
作り方 用意したテンプレの {{フィールド}} に値を埋める Python でファイルをゼロから組み立てる
対応フォーマット Word のみ Word / Excel / PowerPoint / PDF
グラフ テンプレに用意した範囲 コードで自由に作る(Excelは編集可能なネイティブグラフ)
テンプレート 必要 不要
課金 プロンプト実行(Copilot Credits) プレミアム(Copilot Credits)

コードインタープリターは、Python を実行して Word / Excel / PowerPoint / PDF を処理できます。

Code interpreter is a Python execution engine integrated within Copilot Studio and prompt builder prompts. It allows users to run code in a secure, sandboxed environment to perform data analysis, process Word, Excel, PowerPoint and PDF files, and generate visualizations.

引用元: FAQ for code interpreter | Microsoft Learn

本記事の生成は、エージェントの 「設定」→「生成AI」→「ファイルの処理能力」「コードインタープリター」 をオンにしたうえで、テストチャットで実行します。

なお、コードインタープリターを使うには、エージェント側で ユーザー認証を有効にしておく必要があります。認証なし(Direct Line の No authentication など)では動きません。

To use code interpreter, you need to configure your agent, in agent settings, to use user authentication. For example, using Direct Line with No authentication selected doesn't work for scenarios using code interpreter.

引用元: Use code interpreter in a prompt to generate and execute Python code | Microsoft Learn

3. Excelをネイティブ生成する

テストチャットで、集計値をまとめた Excel をネイティブのグラフ付きで生成するよう依頼します。

3社の2025年ARR集計値だけを使い、openpyxl で .xlsx を1ファイル生成してください。ブログ用に表と棒グラフが1画面に収まる配置にすること。手順を必ず全て実行してください。

1. シート名「ARR集計」を作る。A1:B1 に見出し「会社名」「ARR(百万円)」、A2:B4 に CloudNova 1950 / StreamForge 1300 / Datapeak 2810 を入れる。
2. 見出し行(A1:B1)は濃紺背景・白の太字。B列は桁区切り(#,##0)。A列幅16、B列幅14。
3. openpyxl.chart.BarChart と Reference で、値=B2:B4・カテゴリ=A2:A4 の縦棒グラフを作る。タイトルは「2025年 ARR比較(百万円)」、凡例は非表示、サイズは width=11・height=7(cm)。表の右の D1 セルに add_chart で埋め込む(画像ではなくセル参照のネイティブグラフ)。
4. 保存し、最後に「シート一覧」「グラフ数」「グラフの貼付セルとサイズ」を報告してから .xlsx のダウンロードリンクを返す。
ここにない数値は使わないこと。

コードインタープリターが openpyxl(Excelファイルを操作するPythonライブラリ)を実行し、.xlsx を生成しました。
応答には実行結果のレポート(シート一覧・グラフ数・グラフの貼り付けセルとサイズ)が表示され、ARR_2025_comparison.xlsx のダウンロードリンクが返ります。

コードインタープリターが openpyxl で Excel を生成した応答。実行結果レポートとダウンロードリンク
Excel 生成の応答。指示どおり「シート一覧=ARR集計/グラフ数=1/貼り付け=D1/サイズ=幅11cm×高さ7cm」と報告され、ARR_2025_comparison.xlsx のダウンロードリンクが出ている

ダウンロードして開くと、集計表の右に棒グラフが並んだ、編集できるネイティブの Excel になっていました。
棒グラフは画像ではなくセル参照(B2:B4)を持つ BarChart オブジェクトなので、Excel 上で系列色・軸・種類を編集できます。

ダウンロードした Excel。集計表とネイティブの棒グラフが1シートに並ぶ
開いた ARR_2025_comparison.xlsx。左に集計表(ヘッダー書式・桁区切り)、右にセル参照のネイティブ棒グラフ。指定どおり1画面に収まっている

ここで1つ気づきがあります。
今回生成された棒グラフは、横軸の会社名ラベルも、棒の数値ラベルも付いていませんでした(上の画像でも棒が3本並ぶだけで、どの棒がどの会社かはグラフ単体では分かりません)。
openpyxl では数値ラベル(データラベル)はデフォルトでオフで、横軸の項目名もカテゴリ参照(set_categories)が効いていないと出ないため、明示しないとこのようにラベルなしのグラフになりがちです。
ネイティブで編集可能ではあるものの、そのまま資料に使える体裁とは限らず、ラベルが要るなら指示やコードで付ける必要があります。

4. PowerPointをネイティブ生成する

同じく、PowerPoint をゼロから生成させます。
2025年度の3社KPIを渡し、python-pptx で3スライドのプレゼンテーションを組み立てさせます。

次の2025年度のKPI(百万円・%)だけを使って、3社比較のPowerPointを python-pptx で生成してください。表紙・ARR棒グラフ・示唆の3スライド構成、ファイル名は 2025_KPI_Comparison.pptx、完成したら .pptx のダウンロードリンクを返してください。ここにない数値は使わないでください。
CloudNova:ARR 1950、NRR 120、営業利益率 13.5
StreamForge:ARR 1300、NRR 109、営業利益率 1.0
Datapeak:ARR 2810、NRR 128、営業利益率 19.0

コードインタープリターが python-pptx(PowerPointファイルを操作するPythonライブラリ)を実行しました。
応答では、表紙・ARR棒グラフ・示唆の3スライドからなる 2025_KPI_Comparison.pptx を生成したと説明され、ダウンロードリンクが返りました。
渡した数値(CloudNova / StreamForge / Datapeak の ARR・NRR・営業利益率)だけが使われ、ここにない数値は持ち出されていません。

python-pptx で3スライドを生成した応答。スライド構成・使用データ・ダウンロードリンク
PowerPoint 生成の応答。左に実行された python-pptx のコード、右にスライド構成(表紙・ARR棒グラフ・主要示唆)と使用データ(渡した2025年度の値のみ)が示され、2025_KPI_Comparison.pptx のダウンロードリンクが出ている

Word の穴埋め(前回)と違い、テンプレートなしでスライドを組み立てています。
ダウンロードして開くと、説明どおり3スライドが作られていました。順番に見ていきます。

表紙は、タイトルと対象3社を置いただけのシンプルな構成です。

スライド1:表紙
スライド1(表紙)。「2025年度 SaaS KPI 比較レポート」と対象3社(CloudNova / StreamForge / Datapeak)

2枚目は ARR の棒グラフです。
同じ棒グラフでも、python-pptx で作ったこのグラフは横軸の会社名ラベルも、棒の数値ラベルも付いた状態で生成されました(手順3の Excel グラフが軸ラベル・数値なしだったのと対照的です)。

スライド2:ARR棒グラフ
スライド2(ARR棒グラフ)。CloudNova 1,950/StreamForge 1,300/Datapeak 2,810。横軸の会社名と各棒の数値が表示され、グラフ単体でそのまま資料に使える体裁になっている

3枚目は示唆です。
渡した ARR・NRR・営業利益率から、3社比較のコメントが箇条書きで生成されました。

スライド3:主要な示唆
スライド3(主要な示唆)。「Datapeak が全指標で首位」「StreamForge は営業利益率が低く収益性に課題」「CloudNova はバランス型」と、渡した数値に沿ったコメントが入っている

Excel(openpyxl)と PowerPoint(python-pptx)で同じ「ネイティブの棒グラフ」を作っても、出てくる体裁は同じとは限りません。
ラベルの有無は、生成されたコードがカテゴリやデータラベルを設定するかどうかで変わります。資料としてそのまま使えるグラフが欲しいなら、軸ラベル・数値ラベル・凡例まで指示に含めておくのが無難です。

6. 注意点:生成時間・配布

ネイティブ生成を使うときの注意点が2つあります。

1つ目は、生成時間です。
私の環境では、PowerPoint も Excel も、生成に1分以上(おおむね1分〜1分半)かかりました。
エージェントフローのツールは、同期で100秒以内に応答する必要があります。

Respond to the agent within the 100-second action limit. Optimize the flow logic, queries, and the amount of data returned so that a typical run is below this 100-second limit.

引用元: Add an agent flow or workflow as a tool to an agent | Microsoft Learn

ファイル生成は100秒前後かかることがあるため、そのまま同期フローに載せるとタイムアウトの恐れがあります。
生成は、テストチャットやエージェントチャットで直接使うのが無難です。

Session timeouts for long-running tasks

引用元: FAQ for code interpreter | Microsoft Learn

2つ目は、配布です。
生成したファイルはセッション中のみ手に入る状態なので、ユーザーに確実に渡すには OneDrive などに保存して共有リンクを返します。これは配布の回で扱います。

7. まとめ

コードインタープリターを使うと、テンプレートなしで PowerPoint / Excel をゼロから生成できます。
特に Excel は、画像ではなくデータ参照を持つネイティブのグラフを埋め込む形式のため、受け取った人が Excel 上で編集できる作りになります。

生成に分単位かかること、生成物の配布には別の手当てが要ること、プレミアム課金であることは、運用前に押さえておく必要があります。

参考

この記事をシェアする

関連記事