摘要:邮件合并是Office的一项功能,可便捷地批量生成文档,却无法从大量Word文档中汇总信息。结合实际应用,阐述基于Python语言对Word文档进行批量导入、读取其中的表格与段落、汇总信息至Excel工作簿的实现过程。实现反向邮件合并功能,解决Word文档批量汇总中的多个难点,实现Word文档批量汇总的自动化,有效提高了用户的工作效率,适用于人事数据、财务数据、员工信息的汇总,具有良好的实用性与推广价值。

关键词:Python;邮件合并;批量汇总

邮件合并是Office提供的一项既强大又实用的功能,其作用是将存放在Excel中的数据源按照一个记录一页的方式生成Word文档,常用于批量制作邮件、请柬、简历、成绩单、证书、工作档案等。邮件合并的使用步骤如下:首先准备标准的Excel数据源和Word模板,接着在Word模板中启动邮件合并、选择收件人、插入数据域、查看合并数据、完成合并。其主要工作在于Excel数据源和Word模板的制作,其余步骤通过在Word模板中选择相应功能即可完成,极大地提高了批量制作文档的效率。在实际工作中不但需要邮件合并功能,还需要反向邮件合并功能,即从同一模板下的Word文档中提取信息并汇总为Excel表,比如汇总所有员工的工作档案、汇总所有党员的基本信息文档、汇总所有员工的职业资格文档等。但是Office并未提供反向邮件合并功能,无法便捷地从大量Word文档中提取信息。Python语言提供了操作Office的库,基于Python编程实现反向邮件合并,可快速从Word文档的表格、段落中提取信息,汇总并输出为Excel工作簿。

1需求分析

反向邮件合并即批量读取Word文档,将文档中的信息汇总为Excel工作簿。其功能还包括在计算机桌面检查并生成“反向邮件合并”文件夹,由用户将待合并的文档存放到此文件夹内。Word文档中待合并的信息分别在表格和段落中。对于表格,需要将所有文档相同位置的单元格内容汇总为Excel表的一列;对于段落,需要将全部文档相同位置的段落文本汇总为Excel表的一列,便于下一步根据需要保留、删除信息。以汇总员工工作档案为例,在单个Word文档中记录了员工个人信息、学历与培训、职业资格、获奖证书、荣誉称号、联系方式等信息,为便于统计,将全体员工的工作档案汇总为Excel表,则Excel表的一列对应着全部Word文档相同位置的信息。比如Excel表的“姓名”列存放全部Word文档中的姓名信息,“培训”列存放所有Word文档中的培训信息等。之后通过保留Excel表部分列的方法即可选取所需的信息。实现反向邮件合并的步骤包括:路径生成、Word文件识别、读取文档、遍历表格与段落、信息汇总至数据帧、合并数据帧、结果输出至Excel工作簿等。

2编程实现

2.1编程环境编程环境采用Windows下的Anaconda软件,Anaconda包含了Conda、Python在内的大量科学包及其依赖项,以及高效的Python开发环境Spyder。具体开发环境为:Windows7/10操作系统、Anaconda3-5.3.0(64-bit)、Python-docx库,Pandas库。2.2导入代码所需的库实现反向邮件合并功能依赖于Python下的os、Python-docx、Pandas三个库,其中os是Python自带的标准库,Python-docx与Pandas是第三方库,需事先安装。importos#用于路径生成与识别importdocx#用于操作Wordimportpandasaspd#用于操作Excel2.3获取Word文档中的表格与段落首先获取计算机桌面的路径,在计算机桌面检查并创建“反向邮件合并”文件夹。遍历该文件夹内所有文件,通过f.endswith('.docx')方法选取路径名以“docx”结尾的文档,通过docx.Document.tables、docx.Document.paragraphs读取文档中的表格集与段落集。关键代码如下:path_desktop=os.path.join(os.path.expanduser("~"),'Desktop').replace('\\','/')path_反向邮件合并=path_desktop+'/反向邮件合并/'#设置反向邮件合并文件夹的路径ifos.path.exists(path_反向邮件合并):#检查并生成反向邮件合并文件夹passelse:os.makedirs(path_反向邮件合并)files=os.listdir(path_反向邮件合并)#获取该文件夹下所有文件路径data1=pd.DataFrame()#创建空的总表data2=pd.DataFrame()forfinfiles:#对于该文件夹下所有文件iff.endswith('.docx'):#如果文档的后缀名是docxdocument=docx.Document(path_反向邮件合并+f)#读取文档tables=document.tables#获取文档中的表格集paragraphs=document.paragraphs#获取文档中的段落集else:pass#忽略目录下的非docx文件2.4表格信息合并表格中的信息存放在每个单元格中,通过table.cell.text方法可按位置获取单元格内的文本。首先创建与Word表格同样尺寸的数据帧,遍历表格中的所有单元格,将每个单元格内的信息连接为一个文本后存放到数据帧的相同位置,便生成了与当前Word文档表格内容一致的数据帧。但多个表格内容不可直接纵向合并,否则会导致多种属性的数据被存放到一列中,影响下一步的信息提取。因此将每个数据帧重塑为一行,再将所有行的数据帧合并。关键代码如下:fortableintables:#对于每一个表格row_num=len(table.rows)#获取表格的行数col_num=len(table.columns)#获取表格的列数total_num=row_num*col_num#获取表格的单元格数#创建与文档中的每个表格同样大小的数据帧data1_small=pd.DataFrame(columns=range(col_num),index=range(row_num))forrowinrange(row_num):forcolinrange(col_num):message=''.join(table.cell(row,col).text.split())#获取当前单元格的信息data1_small.iloc[row,col]=message#存放到数据帧的对应位置data1_small=pd.DataFrame(data1_small.values.reshape(1,total_num))#将数据帧重塑为一行data1=pd.concat([data1,data1_small],ignore_index=True)#将该单行数据帧合并到总表1中2.5段落信息合并段落中的信息即该段落的全部文本,通过paragraph.text方法可按顺序获取段落文本。首先创建列数等于段落数的单行数据帧,遍历所有段落,将每个段落的文本存放到数据帧的对应列,便生成了包含当前Word文档所有段落文本的单行数据帧,再将所有行数据帧合并。关键代码如下:p_num=len(paragraphs)data2_small=pd.DataFrame(columns=range(p_num),index=range(1))fori,tinenumerate(paragraphs):#枚举段落集中的段落与下标message=t.text#获取当前段落文本data2_small.iloc[0,i]=message#存放到数据帧的对应位置data2_small=pd.DataFrame(data2_small.values.reshape(1,p_num))#重塑数据帧data2=pd.concat([data2,data2_small],ignore_index=True)#将该单行数据帧合并到总表2中2.6信息输出将信息提取结果输出为“反向邮件合并结果.xlsx”工作簿,其中包含“表格合并结果”与“段落合并结果”两个工作表,关键代码如下:writer=pd.ExcelWriter(path_反向邮件合并+'反向邮件合并结果.xlsx')data1.to_excel(writer,'表格合并结果')data2.to_excel(writer,'段落合并结果')writer.save()

3结论

Office的邮件合并功能可便捷地批量生成文档,却无法从大量Word文档中汇总信息,如果缺乏自动化、批量化的汇总方法,信息汇总的过程将成为耗时多、易出错、效率低的瓶颈环节。借助Python下的Python-docx库与Pandas库,管理人员可以快速、准确地从结构一致的Word文档中读取数据并汇总至Excel工作簿,从而实现反向邮件合并功能。除了汇总Word文档中的信息,Python的Pandas库自带功能齐全的统计分析函数,用户也可以方便地自定义函数,对汇总后的信息进行个性化的分析,极大地拓展了Python的分析能力,有效地提高了用户的工作效率,具有良好的实用性与推广价值。

参考文献:

[1]张良均,王路,谭立云,等.Python数据分析与挖掘实战[M].北京:机械工业出版社,2015:60-64.

[2]Kyxdpzy.从Excel到Python:数据分析进阶指南[M/OL].(2019-04-27)

[3]MCKINNEYW.利用Python进行数据分析:第2版[M].徐敬一,译.北京:机械工业出版社,2018:10-11.

[4]恒盛杰资讯.Word/Excel/PPT2016高效办公实战从入门到精通[M].北京:机械工业出版社,2017:366-373.

[5]杨阳.Word/Excel/PPT2016办公应用从入门到精通[M].天津:天津科学技术出版社,2017:570-574.

[6]张志强,赵越.零基础学Python[M].北京:机械工业出版社,2015:85-86.

作者:马孝宗 戚亚东 徐燕 单位:河南中烟工业有限责任公司驻马店卷烟厂

python邮件合并的基本操作步骤_Python如何实现反向邮件合并功能相关推荐

  1. python邮件合并的基本操作步骤_python邮件合并工具

    python写了一个自动化小工具,用于批量邮件合并,这篇文章就是工具使用方法的介绍了. 下面是介绍: MailMergeTool 该工具可以指定1个xlsx作为数据来源.指定1个或多个docx作为模板 ...

  2. python 邮件合并的基本操作步骤_邮件合并的五大步骤

    展开全部 进行邮件合并的简单步骤如下: 1.切换到"邮件"菜单下,点击"选择收件人",62616964757a686964616fe78988e69d83313 ...

  3. python合并word单元格_python之DataFrame实现excel合并单元格_python

    这篇文章主要为大家详细介绍了python之DataFrame实现excel合并单元格,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在工作中经常遇到需要将数据输出到excel,且需要对其中一些单元 ...

  4. python读取邮件发送日期和时间_Python读取指定日期邮件的实例

    背景:9月份有部分数据缺失,这部分数据在邮箱里,需要重新拉取,但是每天几百封邮件,总共有6.7万封邮件,使用stat()和retr(which)结合遍历很 耗时 基于如上背景,初始大致思路为: 使用二 ...

  5. python中带附件发送电子邮件_python发送带附件邮件

    Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. py ...

  6. python爬取网站数据步骤_python怎么爬取数据

    在学习python的过程中,学会获取网站的内容是我们必须要掌握的知识和技能,今天就分享一下爬虫的基本流程,只有了解了过程,我们再慢慢一步步的去掌握它所包含的知识 Python网络爬虫大概需要以下几个步 ...

  7. python通过什么对象连接数据库步骤_Python连接MySQL数据库方法介绍(超详细!手把手项目案例操作)...

    本文涉及到的开发环境:操作系统 Windows 10 数据库 MySQL 8.0 Python 3.7.2 pip 19.0.3 两种方法进行数据库的连接分别是PyMySQL和mysql.connec ...

  8. python合并单元格居中_Python基于xlrd模块处理合并单元格

    目的: python能使用xlrd模块实现对Excel数据的读取,且按照想要的输出形式. 总体思路: (1)要想实现对Excel数据的读取,需要用到第三方应用,直接应用. (2)实际操作时候和我们实际 ...

  9. python合并单元格处理_Python基于xlrd模块处理合并单元格

    目的: python能使用xlrd模块实现对Excel数据的读取,且按照想要的输出形式. 总体思路: (1)要想实现对Excel数据的读取,需要用到第三方应用,直接应用. (2)实际操作时候和我们实际 ...

最新文章

  1. OPhone2.0应该重在中文应用体验
  2. FTP的主动模式(PORT Mode)及被动模式(Passive Mode)
  3. 阿里大数据分析与应用(part4)--一站式大数据平台DataWorks
  4. 用pythonnet为计算机视觉做图像整理
  5. ssh-copy-id配置rsync免密访问并rsync同步
  6. python写入中文到文件乱码的问题
  7. Cocoa中Core Data的简单介绍
  8. 使用Logisim软件实现一位全加器,四位串行加法器,四位并行加法器。
  9. 校内胡策 T9270 mjt树
  10. 银行业应用系统监控的维度与目标
  11. 各个国家的货币符号和英文缩写全解析
  12. 切蛋糕问题【小学二年级奥数】
  13. 九度1088——剩下的树
  14. 很自由的PDF在线转换器
  15. Amino-PEG8-alcohol,352439-37-3的化学性质分析
  16. spring集成kafka运行时报错:Failed to construct kafka producer] with root cause
  17. 获取当前时间戳-在线时间戳转换工具
  18. 0208中年发福,需要更加注意保持身材
  19. 程序执行报错Missing Connection or ConnectionString 解决方法
  20. C51---9 LED点阵屏

热门文章

  1. 【详细版】独立成分分析:算法和应用(一)
  2. 哈萨克斯坦特警抓住一个在骚乱中实施破坏的“恐怖分子”团伙,缴获大量枪支弹药和外国护照
  3. MinGW跟MSVC的区别跟选择
  4. Apache windows启动时报错 httpd: Could not reliably determine the server's fully qualified domain name...
  5. 最新专业薪资排行榜:网络安全专业稳居第一
  6. pwm一个时间单位_脉冲的单位是什么
  7. [渝粤教育] 西南科技大学 组织行为学 在线考试复习资料
  8. vendor.js低于500k,上传显示超过500k
  9. 织梦常用调用标签以及手册
  10. HWiNFO64 一款测试的相关软甲