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

如何用Jinja将Pandas DataFrame填充至Word文档表格?

问题分析与解决办法

核心问题是数据结构和Jinja模板的匹配度问题:你当前的improvementDict是按列存储数据(每个键对应整列的所有值),但docxtpl填充表格需要的是按行存储的结构(每个元素代表一行的所有字段),再配合对应模板语法才能正确生成多行数据。

1. 修正数据结构

把列导向的字典改成行导向的列表,最简单的方式是用Pandas的to_dict('records')方法直接生成:

from docxtpl import DocxTemplate

doc = DocxTemplate("weekly-report-template.docx")

# 筛选数据
improvementDF = excel_file.loc[excel_file["Issue Type"] == "Improvement"]

# 重命名列并生成行列表:每个元素是一行的字典
improvement_rows = improvementDF.rename(columns={
    'Issue key': 'improvKey',
    'Summary': 'improvTitle',
    'Custom field (RelNote Description)': 'improvNotes'
}).to_dict('records')

# 填充内容的结构调整
fill_content = {'improvementTable': improvement_rows}
doc.render(fill_content)
doc.save('TEST.docx')

生成的improvement_rows结构示例:

[
    {"improvKey": "E-1234", "improvTitle": "Test Title 1", "improvNotes": " "},
    {"improvKey": "E-1235", "improvTitle": "Test Title 2", "improvNotes": " "},
    {"improvKey": "E-1236", "improvTitle": "Test Title 3", "improvNotes": " "}
]

2. 修正Word模板的Jinja语法

打开你的weekly-report-template.docx,找到目标表格,按以下方式设置模板标签:

  • 选中需要重复的表格行,在该行开头插入循环起始标签:{% for row in improvementTable %}
  • 在该行的三个单元格里分别填入:{{ row.improvKey }}、{{ row.improvTitle }}、{{ row.improvNotes }}
  • 在该行末尾插入循环结束标签:{% endfor %}

如果不会用Word的域工具,直接在单元格内手动输入标签即可,确保循环标签完整包裹住要重复的行。

之前写法出错的原因

  • 列导向的数据结构,若模板循环遍历列键,会导致每个单元格填入整个列表,出现“所有数据挤在一行”的情况;
  • 空白行则是因为模板语法与数据结构不匹配,无法正确解析列表中的单个值,最终渲染出空内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:25:18