如何用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
相关产品推荐
相关产品推荐

