保姆级别docxtpl教程,你值得拥有

当你的crush拿着文档需求来找你,需要你的帮助,你能不能第一时间挺身而出!

如果你能,恭喜你,和crush更进一步;如果你不能,没关系,读完这篇文章,使用python让你敢拍着胸脯说:我能

你的crush需要你来保护
你的crush需要你来保护

docxtpl你值得拥有

1. 安装docxtpl库

安装我们的“宝剑”:docxtpl库。它将成为你文档自动化的利器:

pip install docxtpl

docxtpl库整合了jinja2模板引擎,能够快捷方便地批量生产个性化的文档,使用它批量生产不是梦,包含文本替换、图片插入、表格生成等等强大功能。

jinja2语法类似python,不用太多额外的学习成本即可使用。

2.基础用法

首先你需要一个文档作为模板,通过它来生产批量文档。 这里我制作了一个名为template.docx的文档,样式如下:

template.docx
template.docx

开始写代码:

from docxtpl import DocxTemplate

if __name__ == '__main__':
    context = {
        'title': '我是代码里的标题'
    }
    doc = DocxTemplate("template.docx")
    doc.render(context)
    doc.save('new.docx')

代码非常简单,主要说明以下几点:

  1. context:是自定义字典,可以取任何变量名,里面的键可以在template.docx中获取到

  2. DocxTemplate:这是主要的类,传入模板文档路径即可完成初始化

  3. render():将自定义的字典作为数据源给模板文档

  4. save():就是用来保存一个新文档的方法

运行后你将得到一个new.docx文档,它将长这样:

new.docx
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]
}

模板文档:

jinja2代码
jinja2代码

生成截图
生成截图

3.7 列表操作:列插入

python数据源:

context = {
    'list': [0, 1, 2, 3, 4, 5]
}

模板文档:

jinja2代码
jinja2代码

生成截图
生成截图

3.8 列表操作:列合并单元格

python数据源:

context = {
    'list': [0, 1, 2, 3, 4, 5]
}

模板文档:

jinja2代码
jinja2代码

生成截图
生成截图

3.9 列表操作:行合并单元格

python数据源:

context = {
    'list': [0, 1, 2, 3, 4, 5]
}

模板文档:

jinja2代码
jinja2代码

生成截图
生成截图

3.10 获取列表下标序号

python数据源:

context = {
    'list': ['a', 'b', 'c', 'd', 'e', 'f']
}

模板文档:

jinja2代码
jinja2代码

生成截图
生成截图

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又更近了一步,默默按下了这篇文章的点赞按钮,欣慰地将手机锁屏!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python卡皮巴拉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值