上班了,就不能像以前一样快乐的写文章了,作为一个安服仔,当然是客户让干嘛,我们就干嘛。
本次的需求来源:客户的每隔段时间就会有一批数据需要转化为word文档,每次手动就很麻烦,然后今天研究了下,发现一个很好用的库:docxtpl,基于python-docx和jinja2的库。
安装
pip install docxtpl
使用
jinja2语法
使用方法很简单,只需要在word文档中插入jinja2的标签即可。jinja2语法如下:
使用 {{ }} 来包含一个变量,例如插入一个名为time的变量
{{time}}
使用 {% 表达式 %} 来插入表达式,例如插入一段循环
{% for item in list %}
{{item}}
{% endfor %}
更多语法请自行探索
实践
创建一个模板文档:template.doc
配合代码
from docxtpl import DocxTemplate, InlineImage
from docx.shared import Mm
# 读取模板
template = DocxTemplate('template.docx')
# 给变量赋值
context = {
'title': '这是一个测试',
'description': '这是一段描述',
'photo': InlineImage(tpl=template, image_descriptor=r'D:\Pictures\kukudeluoxiaohie.jpg', width=Mm(30)),
'tablelist': [
{'index': 1, 'num': 5},
{'index': 2, 'num': 4},
{'index': 3, 'num': 3},
{'index': 4, 'num': 2},
{'index': 5, 'num': 1},
]
}
# 渲染模板
template.render(context)
# 保存文档
template.save('test.docx')
得到以下效果:
模板的样式会直接做保留,其次对标签设置的样式,替换后的值也会自动继承,没用设置的值(list)就自动不显示,这就非常好用。
更多功能还在测试中……to be continued