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

Python办公自动化之批量生成文档,第1张

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

在日常工作中,类似合同一样的文档通常都会有固定的模板,如偶尔编辑一两份文档,则可以手动完成。假如同一个模板有一百份或更多文档需要生成呢?如果手工逐个文档的编辑保存,不仅容易出错,还是一项费力不讨好的工作;如果能够根据模板批量生成文档,则会大大提高工作效率,减少出错的几率。本文以一个简单的小例子,简述如何通过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             bpBoss20             bpManager21             bpWorker22             bpSex23             bpBirthday: birthday2,1)">24             bpHomeAddress25             bpID26             bpBeginYear': int(sheet.cell_value(i,9)), 整数格式处理27             bpBeginMonth28             bpBeginDay29             bpEndYear30             bpEndMonth31             bpEndDay32             bpDate: bpdate2,1)">33             bpSigner)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.paragraphsfor 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_text15     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 datas42 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办公自动化之批量生成文档所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1183734.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存