查看原文
其他

用python帮你生产指定内容的word文档

大邓 大邓和他的Python 2022-07-09

Python网络爬虫与文本数据分析(学术)


很多岗位经常发送模板化的内容,比如给员工发送工资条信息,实际上改动的地方只有有限的几个字段,诸如姓名、岗位、底薪、补助等,而其他部分内容基本不改动。

如果能用python自动化填充需要调整的字段,那么工作量将会大大降低。docxtpl可以让我们实现docx文件的自动化批量生成。

安装docxtpl





  1. !pip3 install docxtpl

  1. Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple

  2. Requirement already satisfied: docxtpl in /usr/local/lib/python3.7/site-packages (0.6.3)

  3. Requirement already satisfied: lxml in /usr/local/lib/python3.7/site-packages (from docxtpl) (4.4.1)

  4. Requirement already satisfied: six in /usr/local/lib/python3.7/site-packages (from docxtpl) (1.12.0)

  5. Requirement already satisfied: python-docx<=0.8.7 in /usr/local/lib/python3.7/site-packages (from docxtpl) (0.8.7)

  6. Requirement already satisfied: jinja2 in /usr/local/lib/python3.7/site-packages (from docxtpl) (2.10.3)

  7. 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

  1. from docxtpl import DocxTemplate


  2. doc = DocxTemplate("template/工资条.docx")

  3. context = {'name' : "张三",

  4. 'occupation': '销售',

  5. 'base': 3000,

  6. 'food':1000,

  7. 'transport': 2000,

  8. 'bonus': 5000,

  9. 'salary': 11000}


  10. doc.render(context)

  11. doc.save("output/张三.docx")

运行结果

图片





更复杂一点,在模板中插入图片。插入图片稍微麻烦一点,需要InlineImage对象,具体参考例子

  1. from docxtpl import DocxTemplate, InlineImage

  2. from docx.shared import Mm #毫米


  3. doc = DocxTemplate("template/感谢信.docx")

  4. #定义插入的图片

  5. picture = InlineImage(doc,

  6. 'img/感谢有你.jpg',

  7. width=Mm(50),

  8. height=Mm(30))


  9. #插入docx的内容

  10. context = {'name' : "张三",

  11. 'thankpicture': picture}

  12. #插入dd

  13. doc.render(context)

  14. doc.save("output/感谢张三.docx")

运行结果

超链接





  1. from docxtpl import DocxTemplate, RichText

  2. from docx.shared import Mm #毫米


  3. doc = DocxTemplate("template/百度.docx")

  4. #定义超链接

  5. rt = RichText('百度一下你就知道',

  6. #超链接的url

  7. url_id=doc.build_url_id('https://www.baidu.com/'))


  8. #插入docx的内容

  9. context = {'baiduclick' : rt}

  10. #插入dd

  11. doc.render(context)

  12. doc.save("output/百度click.docx")

运行结果

近期文章





精选课程 | Python数据分析实战(学术)

pandas 1.0最新版本特性抢先看

Modin:一行代码让pandas加速数十倍

2020年B站跨年晚会弹幕内容分析

综述:文本分析在市场营销研究中的应用

Lazy Prices公司年报内容变动碰上股价偷懒

使用pandas做数据可视化

用statsmodels库做计量分析

YelpDaset: 酒店管理类数据集10+G

NRC词语情绪词典和词语色彩词典

Loughran&McDonald金融文本情感分析库

股评师分析报告文本情感分析预测股价

使用分析师报告中含有的情感信息预测上市公司股价变动

【公开视频课】Python语法快速入门

【公开视频课】Python爬虫快速入门

一行pandas代码生成哑变量

使用Python读取图片中的文本数据

代码不到40行的超燃动态排序图

jupyter notebook代码获取方式,公众号后台回复关键词“20200116” 


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存