如何使用docxtpl根据条件动态更改Word表格行背景色?
使用docxtpl动态设置Word表格行背景色
核心思路
docxtpl支持在{%tr%}标签中通过条件判断动态绑定行样式,我们可以在Python上下文里准备数据,同时在Word模板中根据行内值的条件(如包含'Error'/'Fail')指定行的背景色样式。
1. 修改Word模板代码
将你原有的模板代码修改为带条件样式的版本,在{%tr%}标签中添加条件判断,匹配到目标值时设置背景色:
{% for key, rows in img.tables.items() %} {% if key == "Summary" %} {%tr style="background-color:#ffcccc;" if row[1] in ['Error', 'Fail'] else "" for row in rows%} {{ row[0] }} {{ row[1] }} {%tr endfor %} {% endif %} {% endfor %}
说明:
#ffcccc是浅红色,可根据需求替换为其他十六进制颜色码,比如#ffffcc(浅黄色)等。
2. Python代码实现
以下是完整的Python代码示例,包含数据准备、模板渲染的全流程:
from docxtpl import DocxTemplate # 初始化模板 doc = DocxTemplate("template.docx") # 替换为你的模板文件路径 # 准备上下文数据(模拟你的img.tables结构) context = { "img": { "tables": { "Summary": [ ["测试项1", "Pass"], ["测试项2", "Error"], ["测试项3", "Fail"], ["测试项4", "Pass"] ], # 其他表格可在此扩展 } } } # 渲染模板并保存 doc.render(context) doc.save("result.docx")
关键说明
- 样式绑定逻辑:模板中的
{%tr style=...%}会根据row[1]的值动态决定是否应用背景色,Python只需保证数据格式正确即可。 - 颜色自定义:如需其他颜色,直接替换十六进制颜色码即可,比如
#d9ead3(浅绿色)对应Pass状态,也可扩展多条件判断。 - 复杂样式扩展:如果需要更复杂的样式(如字体颜色、加粗),可在
style属性中追加CSS样式,示例:style="background-color:#ffcccc; color:#dc143c; font-weight:bold;"
内容的提问来源于stack exchange,提问作者vsm




