Hi~ 大家好!
不知道大家有没有经常制作通知书、邀请函、合同等一类文书,重复性操作强,这些文书如果一个一个的制作,那人岂不成了重复操作的机器人了。在Word文档中制作这类文书时,为了减少重复性操作、以及提高效率,可以使用邮件合并功能,而Python也可以制作这类文书,我们来看下二者的具体操作。
一份合同信息表:
一份合同模板:
word批量制作合同用的是自带的邮件合并功能,可能大家都用过;他并不难,多做几遍基本会了,下面我们开始讲解。
点击上方导航栏中的【邮件】 点击开始【邮件合并下拉箭头】 点击【邮件合并分步向导】
界面右边出现【邮件合并】窗口,直接点击【下一步 开始文档】
第二步是选择模板,本文的模板是当前文档,所以选择【使用当前文档】,点击【下一步 选取收件人】
第三步是选择【数据集】,就是需要插入模板中的数据,本文直接选择【使用现有列表】,接着点击【浏览】,选择【数据集】所在的文件,点击【打开】。
在弹出的【选择表格】窗口中,选择数据集所在的工作表。
在弹出的【邮件合并收件人】窗口中,可以筛选出需要或者不需要的数据,然后点击【确定】。
接着在相应的位置上【插入合并域】
插入完成后,可以【预览结果】,看是否正确。
最后点击【完成并合并下拉箭头】,这里有三个选择,可以编辑成单个文档,也可以直接打印或者发送到对方邮件中。一般邀请函之类的是直接发送到对方的邮件中的,合同会进行打印,看个人需求。
点击任意一个选择,会弹出【合并到新文档】、【合并到打印机】以及【合并到电子邮件】窗口:
我们的需求是弄成文档出来,所以直接点击【编辑单个文档】,然后点击【确定】就可以了!但生成的数据是全都保存在一个文档上的,并不是一个一个的word文档。
python制作合同需要用到docxtpl
库,直接用pip命令进行安装:
pip intsall docxtpl
docxtpl
库里面有一个模板模块:DocxTemplate
,人如其名,它就是用来操作word相关的模板文档。
导入需要的库:
from docxtpl import DocxTemplate
import pandas as pd
import os
使用DocxTemplate
他是用一定的要求的,需要在word模板中加入对应的占位符,我这里直接使用excel的列标题;另外需要注意的是:占位符需要添加两个大括号!
创建一个文件存储生成的word文档:
if not os.path.exists(r'D:\合同'):
os.mkdir(r'D:\合同')
导入合同信息数据:
df = pd.read_excel(r'D:\合同信息.xlsx')
通过循环取出合同信息表中的数据, 建立键值对,这里的键便是模板中的占位符,docxtpl通过键值对的方式,把值赋予给模板中对应的键。
for name, startDate, endDate, post, wage in zip(df['name'], df['startDate'], df['endDate'], df['post'], df['wage']):
# 建立键值对
context = {
"name": name,
"startDate": startDate,
"endDate": endDate,
"post": post,
"wage": wage
}
# 导入模板 DocxTemplate 模板的意思
docx = DocxTemplate('劳动合同.docx')
# 把键值对所对应的值赋予给键 render 赋予的意思
docx.render(context)
docx.save(r"./合同/{}范本.docx".format(name))
结果展示:
运行时间,加入时间获取,试了几次,这是最快的,就算我电脑卡,可这才14份合同,一秒1000份合同,夸张了哈:
python与word二者相比各有各的好,word面向大众,普遍性较强;python能节省时间,运行速度相比word还是很快的,因为word一次性新建那么多内容,挺卡的。就是python广告的打的有点夸张了哈,加了线程都没方法这么快!
本文分享自 Python与Excel之交 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!