1,介绍
我们使用Python的Python-docx库可以自动写入文档,但是如果大致是一样的内容,我们可以使用docxtpl库,这个库是基于python-docx库和jinja2写的,可以渲染模板.我们需要批量创建word文件时, 使用docxtpl可以快速渲染出想要的word文件.类似于前端的渲染.只要在想要插入数据的地方插入类似于{{ a }}的标签,传入字典{{ “a”: 123 }} 就能在标签上渲染出数据123. docxtpl还支持图片,子文档等. 但是目前图片和子文档的支持还不够完善
2,使用
2.1 环境依赖
主要使用python的docxtpl包
安装
pip install docxtpl
2.2 基本使用示例
from docxtpl import DocxTemplate
doc = DocxTemplate("my_word_template.docx")
context = { 'company_name' : "World company" }
doc.render(context)
doc.save("generated_doc.docx")
导言
python-docx-template被开发出来,是因为python-docx的强大在于创建文档,而不是修改它们。
这个想法是开始于创建一个需要用MicrosoftWord生成的文档的示例,它可以像我们想要的那样复杂:如图片、索引表、页脚、页眉、变量,以及我们可以用Word做的任何事情。然后,当我们使用MicrosoftWord编辑文档时,直接在文档中插入类似于Jinja 2的标记。将文档保存为.docx文件(XML格式):它将是.docx模板文件。
现在,我们可以使用python-docx-template从这个.docx模板和将关联的上下文变量生成您想要的多个Word文档。
2.3表格类使用示例
模板关键语法:
{{%tr for row in table_1%}}
{{row.fileName}}
{{%tr endfor%}}
例:
传入示例:
"table_1":[
{
"fileName":"test1","fileNum":"123","sealName":"xxx","sealNum":"123"
}
]
结果示例:
2.3,复杂表格
对于一些复杂表格,可采用模板与传入数据结合的方法去实现一些效果
例如:
在一行表格内实现多行数据,此处不能使用上面那种方式,因为docxtpl模板替换不能按列进行.当然,我们在制作模板时还是可以按行制作,然后把中间行线隐藏即可
如图:
但是在数据传入是,进行区别,即加上"\n"换行符,word可以自动换行来实现我们需要的效果
数据传入:
"table_2": [
{"content": "\n所属流程:流程1\n流程节点:XXXX\n决策人:B\n决策意见:XXXX\n决策时间:xxxxx\n"},
{"content": "\n所属流程:流程1\n流程节点:XXXX\n决策人:B\n决策意见:XXXX\n决策时间:xxxxx\n"},
{"content": "\n所属流程:流程1\n流程节点:XXXX\n决策人:B\n决策意见:XXXX\n决策时间:xxxxx\n"}]
效果如图:
- 后续会讨论更复杂的模板,欢迎大家评阅.