【Copilot Studio】テンプレートに数値を差し込んでWordレポートを自動生成してみた:Document output
はじめに
こんにちは、けーまです。
社内向けの定例レポートや顧客への報告資料を作るとき、「フォーマットは毎回同じで、中の数値だけ入れ替える」という作業がよくあります。
この「固定テンプレートに数値を流し込む」部分を Copilot Studio のエージェントに任せられないか、というのが本記事のテーマです。
そこで本記事では、Copilot Studio の Document output(プレビュー) を取り上げ、2026年6月時点の検証結果をまとめました。
Word テンプレートのプレースホルダーに値を差し込んでレポートを生成する、資料化の基礎を中心に整理しています。
資料作成を自動化するエージェントを検討している方の参考にしていただければと思います。
本記事は、Copilot Studio でエージェントを作るシリーズの第9回です。
シリーズ全体では「収集 → 集計 → グラフ → 示唆 → 資料化」を一気通貫で行うエージェントを目指しており、本記事はその「資料化(Word)」を扱います。
対象読者:Copilot Studio でテンプレートに数値を差し込んで資料(Word)を自動生成したい方
シリーズ記事一覧
| 回 | テーマ | 記事 |
|---|---|---|
| 第1回 | 最初のエージェント | 初めてのエージェントを作ってみた |
| 第2回 | ナレッジ | ナレッジでファイルに基づく回答を試してみた |
| 第3回 | トピック・ツール・フロー | トピック・ツール・エージェントフローで「動き」を作り込む |
| 第4回 | テンプレート・自律トリガー・マルチエージェント | テンプレート・自律トリガー・マルチエージェントで構成を広げてみた |
| 第5回 | 収集(データの渡し方) | 集計用のKPIデータをエージェントに持たせる方法を比べてみた |
| 第6回 | 集計 | KPIの集計をLLMに任せず決定論的にやってみた |
| 第7回 | グラフ | KPIをチャット内でグラフ表示してみた |
| 第8回 | 示唆 | 集計した数値から示唆を生成してみた |
| 第9回 | 資料化(Word) | (本記事) |
1. この記事で検証すること
エージェントに「3社の KPI をまとめたレポートを作って」と頼んだら、決まったフォーマットの Word 文書が出てくる、という状態を目指します。
本記事では、まず固定のKPIデータを使った最小構成で、テンプレートに値が差し込まれることを確認します。ユーザー入力や変数に応じて値が変わる動的な差し込みは、収集・集計の回で扱った入力の受け渡しと組み合わせる発展形です。
具体的には、次の流れを実機で確認します。
- Word テンプレートに
{{フィールド}}形式のプレースホルダーを用意する - Copilot Studio のプロンプトツールで、指示に書いたKPIデータから各プレースホルダーの値を差し込む
- エージェントのテストチャットから自然言語で呼び出し、Word を生成できることを確認する
検証には、架空の SaaS 企業3社(CloudNova / StreamForge / Datapeak)の KPI データ(架空)を使います。
2. 出力手段の整理(Word は Document output、PPT/Excel は Code interpreter)
Copilot Studio でドキュメントを生成する手段はいくつかあります。
本記事で使う Document output と、もう一つの選択肢である Code interpreter を整理します。
Document output はプレビュー機能で、プロンプトの出力を Word 文書にします。
The output of the Document (preview) feature lets you generate a Microsoft Word document for your prompt response instead of text. The generated document follows a layout that needs to be provided in the document output settings.
引用元: Document output (preview) | Microsoft Learn
テンプレートのプレースホルダーに AI が値を生成して差し込む方式です。出力できるのは Word のみです。
Generating only a Word document is supported.
引用元: Document output (preview) | Microsoft Learn
PowerPoint や Excel を生成したい場合は コードインタープリター を使います。
Python を実行して Word / Excel / PowerPoint / PDF を処理できます。
Execute Python code for data analysis, processing Word, Excel, PowerPoint, and PDF files, and visualizations
引用元: Use code interpreter in a prompt to generate and execute Python code | Microsoft Learn
ただしコードインタープリターはプレミアム機能で、Copilot Credits を消費します。
Code generation and execution count as text and generative AI tools (premium) features.
引用元: Use code interpreter in a prompt to generate and execute Python code | Microsoft Learn
| 手段 | 対応フォーマット | 差し込み方法 | 課金 |
|---|---|---|---|
| Document output | Word のみ | テンプレの {{フィールド}} に AI が値を生成 |
プロンプト実行として Copilot Credits を消費(コードインタープリターとは別メーター) |
| Code interpreter | Word / Excel / PowerPoint / PDF | Python 実行 | プレミアム(Copilot Credits) |
後のテスト画面(手順5)でも、プロンプトの実行に Copilot Credits(0.3)が表示されます。
コードインタープリターとは別の、通常のプロンプト実行としての消費です。
本記事では、まず Word(Document output)でテンプレ差し込みの仕組みを確認します。
3. Word テンプレートを用意する
差し込み先の Word テンプレートを作ります。
Document output では、差し替えたい箇所を {{フィールド名}} の形式で書きます。
ルールは次のとおりです。
- 差し替えるフィールドは、二重の波かっこ
{{ }}で囲む(例:{{FirstName}}) - 表の中のフィールドは、テーブル名と列名をピリオドで区切って書く(例:
{{items.quantity}}) - フィールド名にスペースを含めない
- Fields to replace should be identified using double curly brackets. Example:
{{FirstName}}- Fields to replace in a table should identify the table name and the column name, separated with a period. Example:
{{items.quantity}}- Fields to replace shouldn't contain space in the name.
引用元: Document output (preview) | Microsoft Learn
今回は3社固定なので、表の各セルに個別のフィールドを置く構成にしました({{CN_ARR}} など)。
テンプレートは python-docx で生成します。
テンプレート生成スクリプト(クリックすると展開します)
#!/usr/bin/env python3
"""KPI比較レポートのWordテンプレート(Document output 用)を生成する。"""
from docx import Document
OUT = "kpi-report-template.docx"
# 比較表の行: (企業名固定, ARRフィールド, NRRフィールド, 営業利益率フィールド)
TABLE_ROWS = [
("CloudNova", "{{CN_ARR}}", "{{CN_NRR}}", "{{CN_OPM}}"),
("StreamForge", "{{SF_ARR}}", "{{SF_NRR}}", "{{SF_OPM}}"),
("Datapeak", "{{DP_ARR}}", "{{DP_NRR}}", "{{DP_OPM}}"),
]
HEADERS = ["企業", "ARR(百万円)", "NRR(%)", "営業利益率(%)"]
def main() -> None:
doc = Document()
doc.add_heading("SaaS企業 KPI比較レポート", level=0)
doc.add_paragraph("対象期間: {{ReportPeriod}}")
doc.add_heading("主要KPI比較", level=1)
table = doc.add_table(rows=len(TABLE_ROWS) + 1, cols=len(HEADERS))
table.style = "Light Grid Accent 1"
for i, h in enumerate(HEADERS):
table.rows[0].cells[i].text = h
for r, row in enumerate(TABLE_ROWS, start=1):
for c, val in enumerate(row):
table.rows[r].cells[c].text = val
doc.add_heading("比較から読み取れる示唆", level=1)
doc.add_paragraph("{{Insights}}")
doc.save(OUT)
if __name__ == "__main__":
main()
上記を make_docx_template.py として保存します。
そのうえで、次のコマンドを実行します。
pip install python-docx
python make_docx_template.py
表紙・3社の比較表・示唆欄を持つ、プレースホルダー入りのテンプレートができます。

差し替え箇所を {{フィールド}} で書いた Word テンプレート
4. プロンプトツールを Document output で作る
エージェントの 「ツール」 から、新しいプロンプトツールを作ります。
「ツールを追加する」→「プロンプト」 を選びます。
プロンプトエディターが開いたら、右側の出力を 「テキスト」から「ドキュメント」 に変更します。
この「ドキュメント」が Document output です。

出力形式を「ドキュメント」に変更する
「ドキュメントの設定」 を開き、手順3で作ったテンプレートをアップロードします。
アップロードすると、テンプレート内のプレースホルダーが自動で認識されます。

11個のフィールドが「識別済みフィールド」として認識された
次に、左側の指示に「各フィールドに何を入れるか」を書きます。
フィールド名が意味を持つ場合、AI は少ない指示でも正しく埋められますが、CN SF DP のような略称は対応関係を明示しておくと確実です。
以下のSaaS企業3社のKPIデータをもとに、ドキュメントの各フィールドを埋めてください。
KPIデータ(対象期間: 2025年度 第2四半期、2025年7〜9月):
- CloudNova: ARR 1,800百万円, NRR 118%, 営業利益率 12.5%
- StreamForge: ARR 1,150百万円, NRR 104%, 営業利益率 -3.0%
- Datapeak: ARR 2,600百万円, NRR 126%, 営業利益率 18.4%
フィールド対応:
- ReportPeriod: 2025年度 第2四半期(2025年7〜9月)
- CN_ARR / CN_NRR / CN_OPM: CloudNova の ARR / NRR / 営業利益率の数値のみ
- SF_ARR / SF_NRR / SF_OPM: StreamForge の ARR / NRR / 営業利益率の数値のみ
- DP_ARR / DP_NRR / DP_OPM: Datapeak の ARR / NRR / 営業利益率の数値のみ
- Insights: 3社比較から読み取れる示唆を3〜4文(各社の強み・弱みと首位企業)
数値は上記データのとおりに入れ、創作しないこと。
5. テストでフィールド差し込みを確認する
指示を入れると 「テスト」 ボタンが有効になります。
テストを実行すると、各フィールドに差し込まれた値と、生成された Word のダウンロードリンクが表示されます。

11フィールドすべてに正しい値が差し込まれ、「出力.docx」のダウンロードリンクが出た
私の環境では、ARR・NRR・営業利益率の数値はすべて入力データのとおりに差し込まれ、Insights も入力から生成されました。
ダウンロードした Word は、テンプレートの表に数値が入った、編集可能なネイティブの Word 表になっています。

テンプレートに数値が差し込まれた Word。表はネイティブの Word 表で編集可能
確認できたら、プロンプトツールを保存します。
保存時に名前と説明を求められます。
説明はエージェントのオーケストレーターがツールを選ぶ判断に使われるため、「いつ使うツールか」が分かる内容にします。
6. エージェントから自然言語で呼び出す
作ったプロンプトツールは、エージェントのツールとして登録されます。
テストチャットから自然言語で依頼してみます。
「3社のKPIをWordのレポートにまとめて出力してください」と送ると、エージェントが自動でこのツールを選んで実行し、Word を生成したとの文言が出ました。
しかし、Word のダウンロードリンクが出ませんでした。
公式にも、トピックでは生成ドキュメントのバイト列をノード出力として直接扱えないため、フロー経由で共有リンクを返す方法が案内されています。
Unlike cloud flows and agent flows, the Document Output Content Bytes output isn't directly available as a node output in a topic. To allow a user to download the generated document in a topic, use a cloud flow as an intermediary to save the document and return a download link.
引用元: Document output (preview) | Microsoft Learn
ユーザーが実ファイルを受け取れるようにするには、フローを経由します。
公式ドキュメントの手順は次のとおりです。
- 「プロンプトを実行する(Run a prompt)」 アクションを追加し、Document output で作ったプロンプトを選ぶ
- OneDrive または SharePoint の 「ファイルの作成(Create file)」 アクションを追加する
- その 「ファイルコンテンツ(File content)」 に、プロンプトの出力 「Document Output Content Bytes」 を指定する
- 作成したファイルに対して 「共有リンクの作成(Create sharing link)」 アクションを追加し、ダウンロード用の共有 URL を生成する
- 「Power Virtual Agents に値を返す(Return value(s) to Power Virtual Agents)」 アクションで、共有リンクの URL を出力変数として返す
- Add a Run a prompt action and select the prompt created in Create a prompt with document output.
- Add the action Create file from OneDrive or SharePoint.
- From the prompt action in the File content field, select Document Output Content Bytes.
- Add a Create sharing link action for the file to generate a shareable download URL.
- Add a Return value(s) to Power Virtual Agents action and return the sharing link URL as an output variable.
引用元: Document output (preview) | Microsoft Learn
このフローをツールとして呼べば、チャットに共有リンクを返せます。
本記事ではフローによる配布までは検証していないため、別の記事で扱います。

自然言語の依頼からツールが自動選択・実行され、KPI比較レポートが生成された
7. まとめ
定型の Word レポートなら、サードパーティのコネクタを使わず、標準機能の Document output だけで「テンプレートに数値を差し込んで生成する」最小構成が組めます。
今回の検証では、固定データを使って、自然言語の依頼からツール選択・差し込み・Word 生成?までの流れを確認することはできました。
一方で、ユーザーへのファイル配布(共有リンク)や、PowerPoint / Excel への展開は本記事の範囲外です。
配布はフロー、PowerPoint / Excel は Code interpreter と、別の手段が要ります。これらは後の回で扱います。







