小言_互联网的博客

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

373人阅读  评论(0)

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

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

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

安装docxtpl

!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” 


转载:https://blog.csdn.net/weixin_38008864/article/details/104013355
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场