使用python-docx-template生成表格仅新增行无内容问题求助
使用python-docx-template生成表格时数据未填充的问题排查与解决
我在使用python-docx-template自动化生成报告时遇到表格数据填充异常,遂从基础表格开始测试:
- 模板表格:包含
parametro、unidad、tecnica、metodo四个表头,预留了待动态填充的空行 - 测试代码:
from docxtpl import DocxTemplate tpl = DocxTemplate('TITULO.docx') context = { 'tbl_contents': [ {'parametro' : 'TEMPERATURA AMBIENTE', 'unidad' : '°C', 'tecnica' : 'TERMOMETRICO', 'metodo' : 'SM 2550 B'}, {'parametro' : 'TEMPERATURA MUESTRA', 'unidad' : '°C', 'tecnica' : 'TERMOMETRICO', 'metodo' : 'SM 2550 B'}, {'parametro' : 'pH', 'unidad' : 'UNIDADES', 'tecnica' : 'ELECTROMETRICO', 'metodo' : 'SM 4500H+ B'}, ] } tpl.render(context) tpl.save('output/dynamic_table.docx')
执行后脚本成功新增3行,但对应数据未填充,最终表格仅显示空的新增行。参考了动态填充表格的可正常运行示例,特此求助问题原因及解决方法。
可能原因及解决方法
1. 模板表格的标签格式不规范
python-docx-template对表格动态填充的标签有严格要求:
- 变量标签必须用
{{ 变量名 }}格式,且要和context中的键完全一致(注意大小写,比如parametro不能写成Parametro) - 循环控制标签
{% for item in tbl_contents %}和{% endfor %}必须分别放在待循环行的第一个单元格和最后一个单元格内,不能跨单元格或混在其他文本中 - 每个单元格的变量要对应
context中字典的键,比如第一个单元格写{{ item.parametro }},第二个写{{ item.unidad }},以此类推
2. 模板未正确设置循环块
正确的模板表格行设置示例:
| 表头1 | 表头2 | 表头3 | 表头4 |
|---|---|---|---|
{% for item in tbl_contents %}{{ item.parametro }} | {{ item.unidad }} | {{ item.tecnica }} | {{ item.metodo }}{% endfor %} |
3. 模板文件格式兼容问题
- 确保模板是用Microsoft Word保存的标准
.docx文件,避免用WPS等其他办公软件保存,防止格式损坏 - 不要使用合并单元格的表格结构,python-docx-template对合并单元格的动态填充支持有限
验证步骤
- 打开模板文件
TITULO.docx,检查待填充行的每个单元格是否按上述要求设置了标签 - 保存模板后重新运行测试代码,查看生成的
dynamic_table.docx是否正常填充数据
内容的提问来源于stack exchange,提问作者DeivDev97
相关产品推荐
相关产品推荐

