mcpField
T
template-engine

template-engine

github.com/claude-office-skillsドキュメント5454.7k 回インストール39 週間前に更新
リポジトリ

template-engine について

template-engineは、入力データでテンプレートのプレースホルダーを埋め、文書を生成するスキルです。Jinja2ベースの構文を用い、Word、Excel、PowerPointの文書や一括差し込みに対応します。

主な機能

  1. 01プレースホルダーによる文書生成
  2. 02Jinja2形式の変数とロジック
  3. 03Wordテンプレートへの入力
  4. 04Excelテンプレートへの入力
  5. 05一括差し込み

活用シーン

  1. 01データから個別レポートを生成
  2. 02手紙や契約書を一括作成
  3. 03テンプレートから証明書を作成
  4. 04ユーザーデータでフォームに入力

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/claude-office-skills/skills --skill template-engine

インストール後、Claude Code で/template-engineを入力して読み込まれたか確認します。

詳細

テンプレートエンジンスキル

概要

このスキルでは、テンプレートを使ったドキュメント生成ができます。プレースホルダーを含むテンプレートを定義すると、データを自動的に入力できます。Word、Excel、PowerPoint などに対応しています。

使い方

  1. 実現したい内容を説明します
  2. 必要な入力データやファイルを提供します
  3. 適切な操作を実行します

プロンプトの例:

  • 「手紙や契約書を一括で差し込み印刷する」
  • 「データから個別のレポートを生成する」
  • 「テンプレートから証明書を作成する」
  • 「ユーザーデータをフォームに自動入力する」

ドメイン知識

テンプレート構文(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")

ベストプラクティス

  1. わかりやすいプレースホルダー名を使用します({{client_name}})
  2. レンダリングの前にデータを検証します
  3. データが欠けている場合も適切に処理します
  4. テンプレートをバージョン管理します

インストール

# Install required dependencies
pip install python-docx openpyxl python-pptx reportlab jinja2

リソース

コメント