Template Engine

作者 claude-office-skills9c4c7d5cd281MIT499 个星标收录于 2026年10月8日更新于 2026年10月8日仓库8个月前更新

Auto-fill document templates with data - mail merge for any format

仅含说明Documents & Office
AI 生成的概览

用数据填充文档模板,支持 Word、Excel 和 PowerPoint 文件的邮件合并。

功能
该技能介绍基于模板的文档生成:模板中包含占位符,再用提供的数据进行填充。它涵盖 Jinja2 风格的替换、循环、条件和过滤器语法,并给出通过 docxtpl 处理 Word、通过 openpyxl 处理 Excel 的示例。它还说明了从 CSV 文件批量邮件合并以及条件内容渲染,最终生成填充后的文档。
适用场景
适用于信函或合同的邮件合并、根据数据生成个性化报告、用模板制作证书,或用用户数据自动填写表单。
运行要求
仅为说明性内容,不附带脚本。文档中的示例需要 Python 以及 python-docx、openpyxl、python-pptx、reportlab 和 jinja2,并提到 office-mcp 服务器的 fill_docx_template 工具。

Template Engine Skill

Overview

This skill enables template-based document generation - define templates with placeholders, then automatically fill them with data. Works with Word, Excel, PowerPoint, and more.

How to Use

  1. Describe what you want to accomplish
  2. Provide any required input data or files
  3. I'll execute the appropriate operations

Example prompts:

  • "Mail merge for bulk letters/contracts"
  • "Generate personalized reports from data"
  • "Create certificates from templates"
  • "Auto-fill forms with user data"

Domain Knowledge

Template Syntax (Jinja2-based)

{{ variable }}           - Simple substitution{% for item in list %}   - Loop{% if condition %}       - Conditional{{ date | format_date }} - Filter

Word Template Example

python
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
# Usagefill_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 Template

python
from openpyxl import load_workbookimport 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

Bulk Generation (Mail Merge)

python
import csvfrom 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")

Advanced: Conditional Content

python
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")

Best Practices

  1. Use clear placeholder naming ({{client_name}})
  2. Validate data before rendering
  3. Handle missing data gracefully
  4. Keep templates version-controlled

Installation

bash
# Install required dependenciespip install python-docx openpyxl python-pptx reportlab jinja2

Resources

来源与署名

来源:claude-office-skills/skills位于template-engine提交9c4c7d5

许可证: MIT

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架