上班了,就不能像以前一样快乐的写文章了,作为一个安服仔,当然是客户让干嘛,我们就干嘛。

本次的需求来源:客户的每隔段时间就会有一批数据需要转化为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