template-engine について
template-engineは、入力データでテンプレートのプレースホルダーを埋め、文書を生成するスキルです。Jinja2ベースの構文を用い、Word、Excel、PowerPointの文書や一括差し込みに対応します。
主な機能
- 01プレースホルダーによる文書生成
- 02Jinja2形式の変数とロジック
- 03Wordテンプレートへの入力
- 04Excelテンプレートへの入力
- 05一括差し込み
活用シーン
- 01データから個別レポートを生成
- 02手紙や契約書を一括作成
- 03テンプレートから証明書を作成
- 04ユーザーデータでフォームに入力
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ claude-office-skills/ skills --skill template-engineインストール後、Claude Code で/template-engineを入力して読み込まれたか確認します。
詳細
テンプレートエンジンスキル
概要
このスキルでは、テンプレートを使ったドキュメント生成ができます。プレースホルダーを含むテンプレートを定義すると、データを自動的に入力できます。Word、Excel、PowerPoint などに対応しています。
使い方
- 実現したい内容を説明します
- 必要な入力データやファイルを提供します
- 適切な操作を実行します
プロンプトの例:
- 「手紙や契約書を一括で差し込み印刷する」
- 「データから個別のレポートを生成する」
- 「テンプレートから証明書を作成する」
- 「ユーザーデータをフォームに自動入力する」
ドメイン知識
テンプレート構文(Jinja2 ベース)
{{ variable }} - Simple substitution
{% for item in list %} - Loop
{% if condition %} - Conditional
{{ date | format_date }} - Filter
Word テンプレートの例
from docxtpl import DocxTemplate
# Create template with placeholders:
# Dear {{ name }},
# Thank you for your order #{{ order_id }}...
def fill_template(template_path: str, data: dict, output_path: str):
doc = DocxTemplate(template_path)
doc.render(data)
doc.save(output_path)
return output_path
# Usage
fill_template(
"templates/order_confirmation.docx",
{
"name": "John Smith",
"order_id": "ORD-12345",
"items": [
{"name": "Product A", "qty": 2, "price": 29.99},
{"name": "Product B", "qty": 1, "price": 49.99}
],
"total": 109.97
},
"output/confirmation_john.docx"
)
Excel テンプレート
from openpyxl import load_workbook
import re
def fill_excel_template(template_path: str, data: dict, output_path: str):
wb = load_workbook(template_path)
ws = wb.active
# Find and replace placeholders like {{name}}
for row in ws.iter_rows():
for cell in row:
if cell.value and isinstance(cell.value, str):
for key, value in data.items():
placeholder = "{{" + key + "}}"
if placeholder in cell.value:
cell.value = cell.value.replace(placeholder, str(value))
wb.save(output_path)
return output_path
一括生成(差し込み印刷)
import csv
from pathlib import Path
def mail_merge(template_path: str, data_csv: str, output_dir: str):
"""Generate documents for each row in CSV."""
Path(output_dir).mkdir(exist_ok=True)
with open(data_csv) as f:
reader = csv.DictReader(f)
for i, row in enumerate(reader):
output_path = f"{output_dir}/document_{i+1}.docx"
fill_template(template_path, row, output_path)
print(f"Generated: {output_path}")
# Usage with contacts.csv:
# name,email,company
# John,[email protected],Acme
# Jane,[email protected],Corp
mail_merge(
"templates/welcome_letter.docx",
"data/contacts.csv",
"output/letters"
)
応用:条件付きコンテンツ
from docxtpl import DocxTemplate
# Template with conditionals:
# {% if vip %}
# Thank you for being a VIP member!
# {% else %}
# Thank you for your purchase.
# {% endif %}
doc = DocxTemplate("template.docx")
doc.render({
"name": "John",
"vip": True,
"discount": 20
})
doc.save("output.docx")
ベストプラクティス
- わかりやすいプレースホルダー名を使用します({{client_name}})
- レンダリングの前にデータを検証します
- データが欠けている場合も適切に処理します
- テンプレートをバージョン管理します
インストール
# Install required dependencies
pip install python-docx openpyxl python-pptx reportlab jinja2
リソース
コメント
Markdown 対応