很多岗位经常发送模板化的内容,比如给员工发送工资条信息,实际上改动的地方只有有限的几个字段,诸如姓名、岗位、底薪、补助等,而其他部分内容基本不改动。
如果能用python自动化填充需要调整的字段,那么工作量将会大大降低。docxtpl可以让我们实现docx文件的自动化批量生成。
安装docxtpl
!pip3 install docxtpl
-
Looking in indexes: https:
//pypi.tuna.tsinghua.edu.cn/simple
-
Requirement already satisfied: docxtpl in /usr/local/lib/python3
.7/site-packages (
0.6
.3)
-
Requirement already satisfied: lxml in /usr/local/lib/python3
.7/site-packages (from docxtpl) (
4.4
.1)
-
Requirement already satisfied: six in /usr/local/lib/python3
.7/site-packages (from docxtpl) (
1.12
.0)
-
Requirement already satisfied: python-docx<=
0.8
.7 in /usr/local/lib/python3
.7/site-packages (from docxtpl) (
0.8
.7)
-
Requirement already satisfied: jinja2 in /usr/local/lib/python3
.7/site-packages (from docxtpl) (
2.10
.3)
-
Requirement already satisfied: MarkupSafe>=
0.23 in /usr/local/lib/python3
.7/site-packages (from jinja2->docxtpl) (
1.1
.1)
文本
最简单的模板,只填充文本内容。
假设这是工资条模板,我们需要在docx内做标记告诉python哪些地方需要填充内容。这里使用到jinja2标记方式, 如下图{{variablename}}是需要填充的变量名
我在template文件夹内建立来一个"工资条.docx"模板,其中的jinja模板内容如下
docx文件中的varibalename会在python代码的字典中当作关键词承接相应的值,比如下面的代码会生成张三.docx
-
from docxtpl
import DocxTemplate
-
doc = DocxTemplate(
"template/工资条.docx")
-
context = {
'name' :
"张三",
-
'occupation':
'销售',
-
'base':
3000,
-
'food':
1000,
-
'transport':
2000,
-
'bonus':
5000,
-
'salary':
11000}
-
doc.render(context)
-
doc.save(
"output/张三.docx")
运行结果
图片
更复杂一点,在模板中插入图片。插入图片稍微麻烦一点,需要InlineImage对象,具体参考例子
-
from docxtpl
import DocxTemplate, InlineImage
-
from docx.shared
import Mm #毫米
-
doc = DocxTemplate(
"template/感谢信.docx")
-
#定义插入的图片
-
picture = InlineImage(doc,
-
'img/感谢有你.jpg',
-
width=Mm(
50),
-
height=Mm(
30))
-
#插入docx的内容
-
context = {
'name' :
"张三",
-
'thankpicture': picture}
-
#插入dd
-
doc.render(context)
-
doc.save(
"output/感谢张三.docx")
运行结果
超链接
-
from docxtpl
import DocxTemplate, RichText
-
from docx.shared
import Mm #毫米
-
doc = DocxTemplate(
"template/百度.docx")
-
#定义超链接
-
rt = RichText(
'百度一下你就知道',
-
#超链接的url
-
url_id=doc.build_url_id(
'https://www.baidu.com/'))
-
#插入docx的内容
-
context = {
'baiduclick' : rt}
-
#插入dd
-
doc.render(context)
-
doc.save(
"output/百度click.docx")
运行结果
近期文章
jupyter notebook代码获取方式,公众号后台回复关键词“20200116”
转载:https://blog.csdn.net/weixin_38008864/article/details/104013355
查看评论