← python-docx | openpyxl →

docxtpl

docxtpl 是一个基于 python-docx 的模板库,可以使用 Jinja2 模板语法批量生成 Word 文档。

安装

pip install docxtpl

基本使用

from docxtpl import DocxTemplate

# 加载模板
doc = DocxTemplate("template.docx")

# 准备数据
context = {
    'name': '张三',
    'age': 25,
    'city': '北京',
    'hobbies': ['阅读', '编程', '旅行']
}

# 渲染模板
doc.render(context)

# 保存文档
doc.save("output.docx")
print("文档已生成")

模板示例

# 在 Word 模板中使用以下语法:

# 简单变量
# {{ name }}

# 条件判断
# {% if age >= 18 %}
# 成年人
# {% else %}
# 未成年
# {% endif %}

# 循环
# {% for hobby in hobbies %}
# - {{ hobby }}
# {% endfor %}

# 表格
# | 姓名 | 年龄 | 城市 |
# |------|------|------|
# {% for person in persons %}
# | {{ person.name }} | {{ person.age }} | {{ person.city }} |
# {% endfor %}

批量生成文档

from docxtpl import DocxTemplate

# 加载模板
template = DocxTemplate("template.docx")

# 准备数据列表
data_list = [
    {'name': '张三', 'age': 25, 'city': '北京'},
    {'name': '李四', 'age': 30, 'city': '上海'},
    {'name': '王五', 'age': 28, 'city': '广州'}
]

# 批量生成文档
for i, data in enumerate(data_list):
    context = {'person': data}
    template.render(context)
    template.save(f"output_{i+1}.docx")
    print(f"已生成: output_{i+1}.docx")

使用图片

from docxtpl import DocxTemplate
from docx.shared import Inches

# 加载模板
doc = DocxTemplate("template.docx")

# 准备数据(包含图片)
context = {
    'name': '张三',
    'photo': 'photo.png'  # 图片路径
}

# 渲染模板
doc.render(context)

# 保存文档
doc.save("output_with_image.docx")

复杂模板

from docxtpl import DocxTemplate
from datetime import datetime

# 加载模板
doc = DocxTemplate("invoice_template.docx")

# 准备发票数据
context = {
    'invoice_number': 'INV-2026-001',
    'date': datetime.now().strftime('%Y-%m-%d'),
    'customer': {
        'name': '某某公司',
        'address': '北京市朝阳区',
        'phone': '010-12345678'
    },
    'items': [
        {'name': '产品A', 'quantity': 2, 'price': 100.00},
        {'name': '产品B', 'quantity': 1, 'price': 200.00},
        {'name': '产品C', 'quantity': 3, 'price': 50.00}
    ],
    'total': 450.00
}

# 渲染模板
doc.render(context)

# 保存发票
doc.save("invoice_2026_001.docx")
💡 提示:docxtpl 非常适合批量生成格式统一的文档,如合同、发票、报告等。
← python-docx | openpyxl →