Python办公自动化之批量生成文档

编程之家收集整理的这篇文章主要介绍了Python办公自动化之批量生成文档编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

在日常工作中,类似合同一样的文档通常都会有固定的模板,如偶尔编辑一两份文档,则可以手动完成。假如同一个模板有一百份或更多文档需要生成呢?如果手工逐个文档的编辑保存,不仅容易出错,还是一项费力不讨好的工

在日常工作中,类似合同一样的文档通常都会有固定的模板,如偶尔编辑一两份文档,则可以手动完成。假如同一个模板有一百份或更多文档需要生成呢?如果手工逐个文档的编辑保存,不仅容易出错,还是一项费力不讨好的工作;如果能够根据模板批量生成文档,则会大大提高工作效率,减少出错的几率。本文以一个简单的小例子,简述如何通过Python批量生成文档,仅供学习分享使用,如有不足之处,还请指正。

涉及知识点

  • xlrd模块,用于Excel文档的读取,其中xldate_as_tuple,主要用于Excel读取时的日期格式处理。
  • python-docx 模块,用于word文档的相关操作。

场景介绍

现有一份简化的合同模板,其中红色箭头所指的地方,均是需要替换的地方,如下所示:

同时有21名员工入职,需要签署这份合同,如下所示:

本文的功能就是根据模板文档,为21名员工,分别生成合同文档。

核心代码

1. 读取数据

读取Excel的数据,并返回数据列表,将此功能封装成单独的函数,如下所示:

 1 def read_data(filename: str = None):
 2     """
 3     读取Excel文件内容
 4     :param filename:
 5     :return:
 6      7     datas = []
 8     work_book = xlrd.open_workbook(filename=filename)
 9     sheet = work_book.sheet_by_index(0)
10     for i in range(1,sheet.nrows):
11         # 日期格式转换
12         birthday = xldate_as_tuple(sheet.cell_value(i,6),0)
13         birthday2 = '%(year)d-%(month)d-%(day)d' % {year': birthday[0],month': birthday[1],1)">day': birthday[2]}
14         bpdate = xldate_as_tuple(sheet.cell_value(i,1515         bpdate2 = ': bpdate[0],1)">': bpdate[1],1)">': bpdate[216         data = {
17             bpCompanyname': sheet.cell_value(i,0),18             bpAddress': sheet.cell_value(i,119             bpBosscolor: rgba(128,220             bpManagercolor: rgba(128,321             bpWorkercolor: rgba(128,422             bpSexcolor: rgba(128,523             bpBirthday: birthday2,1)">24             bpHomeAddresscolor: rgba(128,725             bpIDcolor: rgba(128,826             bpBeginYear': int(sheet.cell_value(i,9)), 整数格式处理
27             bpBeginMonth28             bpBeginDay29             bpEndYear30             bpEndMonth31             bpEndDay32             bpDate: bpdate2,1)">33             bpSignercolor: rgba(128,16)
34         }
35         datas.append(data)
36     return datas

2. 单个合同文档生成

Excel的每一行代表一名员工,生成一份合同文档【遍历每一个段落,以及一个段落的文本,逐个替换文本中的变量内容,且保持原有的格式不变】,如下所示:

def write_docx(data,template):
    生成文档
    :param data:
 7 
 8     doc = document(docx=template)
 9     paragraphs = doc.paragraphs
for paragraph in paragraphs:
for run  paragraph.runs:
12             for key  data.keys():
13                 run_text = run.text.replace(key,str(data[key]))
14                 run.text = run_text
15     doc.save(合同/%s合同.docx' % data['])

3. 批量文档生成

遍历所有的员工信息,逐一生成文档,如下所示:

1  batch_write_docx(datas,1)">2     3     批量操作
4     :param datas:
5 6     7     for data  datas:
8         write_docx(data,template)

4. 综合运用

将以上方法依次调用,就可以生成全部文档,如下所示:

1 excel_file = 合同数据.xls'
2 template = 合同模板.docx3 datas = read_data(excel_file)
4  print(datas)
5 batch_write_docx(datas,template)
6 print(done')

5. 示例完整代码

import xlrd
 2 from xlrd  xldate_as_tuple
 3 from docx  document
 4 
 5 
 6  7      8  9 10 11     12     datas =13     work_book = xlrd.open_workbook(filename=14     sheet =15     16         17         birthday = xldate_as_tuple(sheet.cell_value(i,1)">18         birthday2 = 19         bpdate = xldate_as_tuple(sheet.cell_value(i,1)">20         bpdate2 = 21         data =34             35             36             37             38             39 40 41     return datas
42 
43 
44 45     46 47 48 49     50 
51     doc = document(docx=52     paragraphs =53     54         55             56                 run_text =57                 run.text =58     doc.save(])
59 
60 
61 62     63 64 65 66     67     68         write_docx(data,1)">69 
70 
71 excel_file = 72 template = 73 datas =74 75 76 ')
VIEw Code

示例截图

批量文档生成后,截图如下所示:

 

 合同文档内文,如下所示:

 

 以上就是批量生成文档的全部内容,可以看出,生成后的文档,格式模板保持一致。

备注

书愤五首·其一

【作者】陆游 【朝代】宋

早岁那知世事艰,中原北望气如山。

楼船夜雪瓜洲渡,铁马秋风大散(sǎn)关。

塞上长城空自许,镜中衰鬓已先斑。

出师一表真名世,千载谁堪伯仲间。

总结

以上是编程之家为你收集整理的Python办公自动化之批量生成文档全部内容,希望文章能够帮你解决Python办公自动化之批量生成文档所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

Python文章

在程序员职场上,什么样的人最让人反感呢?
作为数据分析师,我们需要经常制作统计分析图表。但是报表太多的时候往往需要花费我们大部分时间去制作报表。这耽误了我们利用大量的时间去进行数据分析。但是作为数据分析师我们应该尽可能去挖掘表格图表数据背后隐藏关联信息,而不是简单的统计表格制作图表再发送报表。既然报表的工作不可免除,那我们应该如何利用我们所学的技术去更好的处理工作呢?这就需要我们制作一个Python小程序让它自己去实现,这样我们就有更多的时间去做数据分析。我们把让程序自己运行的这个过程称为自动化。自动化总是能够很好的节省时间,提高我们的工作效率。让
一、爬虫概述 1. 为什么要学习爬虫? 2. 爬虫与Python 3. 爬虫合法吗? 4. 爬虫的矛与盾 5. 爬虫原理图 and 流程图二、相关技术介绍 1. HTML 与 CSS 2. URL网址解释 3. HTTP 与 HTTРS (1)常见请求方式 (2)常见请求头 (3)常见请求状态码 4. Chrome浏览器分析网站 5. Session与Cookie ...
一、桌面宠物素材1.1 需要准备什么素材桌面宠物的各种动画效果,可以看作是由一个个GIF动图拼接而成,我们需要准备多组GIF动图来实现桌面宠物的动作切换。最好选取是白底的GIF动图。1.2 介绍几种获得GIF白底动图的方式1.2.1 通过pr实现视频转GIFpr在导出的时候选择动画GIF可以直接导出GIF动图。当然了想要白底就需要自已用“蒙版”和画笔工具自己抠图了。1.2.2 通过ps实现图片组转GIFps会高级一点,首先点击最上方的窗口,再点击时间轴,在时间
2、随机密码验证题目描述:代码如下:3、信息分配表(字典)题目描述:代码如下:4、全模式分词(jieba)题目描述:代码如下:5、数字金字塔题目描述:6、求最大值、最小值及平均值题目描述:代码如下:7、交换变量题目描述:代码如下:或或8、输入密码-三次机会题目描述:代码如下:9、水仙花数题目描述:代码如下:或或或10、增加与去掉题目描述:代码如下:11、添加通讯录信息题目
睿智的目标检测56——Pytorch搭建YoloV5目标检测平台学习前言源码下载YoloV5改进的部分(不完全)YoloV5实现思路一、整体结构解析二、网络结构解析1、主干网络Backbone介绍2、构建FPN特征金字塔进行加强特征提取3、利用Yolo Head获得预测结果三、预测结果的解码1、获得预测框与得分2、得分筛选与非极大抑制四、训练部分1、计算loss所需内容2、正样本的匹配过程a、匹配先验框b、匹配特征点3、计算Loss训练自己的YoloV5模型一、数据集的准备二、数据集的处理三、开始网络训练四
事情是这样的:昨天晚上,女朋友让我十二点催她睡觉。不过,可是我实在太困了,熬不下去…… 是吧?女朋友哪有睡觉重要?但,女朋友的命令,我是不敢违抗的……但是睡觉也不能缺!这时候我们该怎么办呢?是时候让Python登场了!喜欢记得收藏、关注、点赞。完整版代码,文末获取Python登场这次我们来做一个自动发送微信的程序,在深夜十二点的时候给女朋友发去消息,也算是尽了一个男朋友的义务了。安装和导入我们需要两个模块:apscheduler,pyautogui快捷键 Windows+r 打开运
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注