当你的crush拿着文档需求来找你,需要你的帮助,你能不能第一时间挺身而出!
如果你能,恭喜你,和crush更进一步;如果你不能,没关系,读完这篇文章,使用python让你敢拍着胸脯说:我能!

docxtpl你值得拥有
1. 安装docxtpl库
安装我们的“宝剑”:docxtpl库。它将成为你文档自动化的利器:
pip install docxtpl
docxtpl库整合了jinja2模板引擎,能够快捷方便地批量生产个性化的文档,使用它批量生产不是梦,包含文本替换、图片插入、表格生成等等强大功能。
jinja2语法类似python,不用太多额外的学习成本即可使用。
2.基础用法
首先你需要一个文档作为模板,通过它来生产批量文档。 这里我制作了一个名为template.docx的文档,样式如下:

开始写代码:
from docxtpl import DocxTemplate
if __name__ == '__main__':
context = {
'title': '我是代码里的标题'
}
doc = DocxTemplate("template.docx")
doc.render(context)
doc.save('new.docx')
代码非常简单,主要说明以下几点:
-
context:是自定义字典,可以取任何变量名,里面的键可以在template.docx中获取到
-
DocxTemplate:这是主要的类,传入模板文档路径即可完成初始化
-
render():将自定义的字典作为数据源给模板文档
-
save():就是用来保存一个新文档的方法
运行后你将得到一个new.docx文档,它将长这样:

你可以发现,模板文档中被替换的部分样式将会保留下来,因此模板文档长什么样,你生成的文档也将是怎么样。
3.jinja2模板语法
生成一个文档非常简单,不过如果想要一个自定义的文档,还是需要了解jinja2在模板文档中的使用,接下来我将介绍一系列在模板文档中的jinja写法。
3.1内容展示
python数据源:
context = {
'text': ''
}
模板文档:
{{text}}
这个在之前的基础语法中展示过了,这里就不展示示例了。
3.2 列表循环展示
python数据源:
context = {
'list': ['a', 'b', 'c']
}
模板文档:
{%for text in list%}
{{ text }}
{%endfor%}


3.3 字典循环展示
python数据源:
context = {
'dict': {
'0': 'a',
'1': 'b',
'2': 'c'
}
}
模板文档:
{%for k in dict%}
{{ k }}, {{dict[k]}}
{%endfor%}


3.4 条件判断
python数据源:
context = {
'value': 10
}
模板文档:
{%if value > 10%}
数据大于10
{%else%}
数据小于等于10
{%endif%}


3.5 设定变量
python数据源:
context = {
'list': [0, 1, 2, 3, 4, 5]
}
模板文档:
{%set count=list|length%}
{{count}}


3.6 列表操作:行插入
python数据源:
context = {
'list': [0, 1, 2, 3, 4, 5]
}
模板文档:


3.7 列表操作:列插入
python数据源:
context = {
'list': [0, 1, 2, 3, 4, 5]
}
模板文档:


3.8 列表操作:列合并单元格
python数据源:
context = {
'list': [0, 1, 2, 3, 4, 5]
}
模板文档:


3.9 列表操作:行合并单元格
python数据源:
context = {
'list': [0, 1, 2, 3, 4, 5]
}
模板文档:


3.10 获取列表下标序号
python数据源:
context = {
'list': ['a', 'b', 'c', 'd', 'e', 'f']
}
模板文档:


3.11 插入图片
python代码:
from docxtpl import DocxTemplate, InlineImage
from docx.shared import Mm
doc = DocxTemplate("template.docx")
image = InlineImage(
doc,
'test.png',
width=Mm(120),
height=Mm(118)
)
context = {
'image': image
}
doc.render(context)
doc.save('new.docx')
模板文档:
{{image}}


4.结尾
以上就是docxtpl库最常用的一些用法,当然它还支持非常多其他的jinja2模板语法,那就靠你自己慢慢摸索了。
这个时候你的crush默默看你帅气地批量生成文档,眼睛里闪着崇拜的星星,你知道已经与crush又更近了一步,默默按下了这篇文章的点赞按钮,欣慰地将手机锁屏!