You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python从JSON数据自动生成Word文档及动态模板实现

基于JSON列表动态生成Word文档行的解决方案

方法1:使用Docxtpl(推荐,支持模板循环)

Docxtpl基于Jinja2模板引擎,能直接在Word模板中定义循环逻辑,自动根据JSON列表长度生成对应行数,是最便捷的方案。

模板准备

在Word模板(.docx文件)中,用Jinja2的循环语法标记需要重复的行:

{% for item in data_list %}
{{ loop.index }}. 名称:{{ item.name }} | 数值:{{ item.value }}
{% endfor %}

如果是表格行,就把整行放在循环标签内:

{% for item in data_list %}
| {{ loop.index }} | {{ item.name }} | {{ item.value }} |
{% endfor %}

代码实现

假设你的JSON数据结构如下(data.json):

{
  "document_title": "动态列表报告",
  "data_list": [
    {"name": "产品X", "value": 500},
    {"name": "产品Y", "value": 350},
    {"name": "产品Z", "value": 720}
  ]
}

对应的Python代码:

import json
from docxtpl import DocxTemplate

# 读取JSON数据
with open("data.json", "r", encoding="utf-8") as f:
    json_data = json.load(f)

# 加载模板并渲染
doc_template = DocxTemplate("dynamic_template.docx")
doc_template.render(json_data)

# 保存生成的文档
doc_template.save("final_report.docx")

运行后,data_list里有多少个元素,模板就会自动生成多少行对应内容。

方法2:使用python-docx手动构建(无模板引擎)

如果不想依赖模板引擎,可直接用python-docx库动态创建内容,完全控制每一行的生成:

代码实现

import json
from docx import Document

# 读取JSON数据
with open("data.json", "r", encoding="utf-8") as f:
    json_data = json.load(f)

# 创建Word文档对象
doc = Document()
doc.add_heading(json_data["document_title"], level=1)

# 添加表格表头
table = doc.add_table(rows=1, cols=3)
header_cells = table.rows[0].cells
header_cells[0].text = "序号"
header_cells[1].text = "产品名称"
header_cells[2].text = "销售数值"

# 遍历JSON列表,添加表格行
for idx, item in enumerate(json_data["data_list"], start=1):
    row_cells = table.add_row().cells
    row_cells[0].text = str(idx)
    row_cells[1].text = item["name"]
    row_cells[2].text = str(item["value"])

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

核心注意事项

  • 模板引擎方案中,JSON的键名必须和模板里的变量名完全匹配,例如模板用{{ item.name }},JSON元素就必须包含name字段。
  • 处理中文时,代码和JSON文件都要使用UTF-8编码,避免乱码问题。
  • 如果是复杂格式(如字体、颜色),可在Word模板中预先设置好样式,渲染时会自动继承。

内容的提问来源于stack exchange,提问作者Kitty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 19:23:21