python docx 合并文档 图片_Python和Word的交互批量生成报告

前言:

本文是一位学弟的投稿,主要是用Python将格式不一致的信评简报Word文档快速生成标准格式的表格,涉及到两步,一是读取所有Word文件,二是处理里面的数据并输出到表格里,能大大提高工作的效率,也可看出Python并不仅仅是能数据分析,更能与我们日常的office工具高度交互。我这里大致的总结下日常工作中能用Python解决的办公需求:

1、excel分析:pandas

pandas是非常好用的处理excel表格数据的模块,再结合正则、列表推导式基本可以替代excel的数据处理,并能实现很多excel较难实现的功能。

2、文件处理:OS模块

批量修改文件名,创建、删除、读取文件

3、Word文档:docx

本文主要用的是该模块

4、PDF读取:pdfplumber

该模块可以读取PDF文档,结合正则分析,可以抓取出想要的数据或者内容。

5、解压文件:zipfile

轻松解压压缩文件。

6、爬虫:requests和selenium

requests基本能解决大部分爬虫需求,需要学习正则,并会分析网页结构。selenium是模拟人工操作,在requests无法爬取的时候,可以使用这个模块,只不过速度有点慢。

正文:

python作为一个优秀的脚本语言,在办公自动化方面有着无与伦比的优势。最近遇到一个需求:把最近几年部门的所有信评简报(全部为docx格式)整理出来一个列表,并在文档首页加一个表格,注明审核人、审核日期与审核意见。这项工作如果手动进行不仅费时费力而且容易出错,请实习生帮忙的话由于此工作过分枯燥容易推高实习生的离职率,利用python能够又好又快的完成这项工作。同样的思路也可以运用到分销协议、债券交易协议等格式文档的自动制作中。  首先,数千个docx文件是存储在数个文件夹中的,命名也是千奇百怪,有些以发行主体全程+信评简报命名,有些以简称+信评简报命名,有些直接以简称命名。为了能较快的将数千个文件统计出来,我们使用DOS时代就家喻户晓的dir命令进行导出。相信大家小学二年级就学过dir命令的用法,加/s就是遍历当前目录及子目录文件。通过快捷键Win+R呼唤出运行对话框,输入cmd打开命令提示符。先用cd命令把命令提示符的工作目录切换到文件存储的路径下,然后键入“dir/s *.docx>doclist.txt”,所有拓展名前三位为doc的文件清单便输出到了同目录的doclist.txt中。(dir命令由于dos时代的限制只能匹配三位字母的拓展名,所以这里*.doc和*.docx的效果是一样的) 之后便可以将txt文本在excel中经过分列等步骤处理得到文件名的列表,再使用xlookup(office365的新功能,用于替代vlookup,支持通配符匹配等多项新功能)利用通配符快速将文件名与对应的发行主体进行匹配。最终你得到了一个类似这样的表格。将其另存为csv格式(最好选择utf-8(逗号分隔),不然还需要在python函数中单独声明编码类型)

python docx 合并文档 图片_Python和Word的交互批量生成报告_第1张图片

接下来的工作交给python进行,需要用到python-docx和docxcompose这两个库,使用pip命令即可安装。python-docx的官方文档如下: https://python-docx.readthedocs.io/en/latest/ 值得注意的是,python-docx仅支持docx文件(Office2007及之后版本使用),不支持doc(Office2003及之前版本使用)文件。Docx文件实质上是一个zip压缩包,文档内容用xml存储,图片等附件单独存储,可读性高;doc则是一整个二进制文件,在压缩率、兼容性和可修复性方面均不及docx。 我们的思路就是先读取csv文件,然后利用python-docx按照csv的信息生成表格存储到临时文件中,再使用docxcompose将临时文件与信息对应的docx文件进行合并,更改文件名后存储到指定目录下。有读者肯定会问,问什么不直接用python-docx在文档一开始插入表格呢?这是因为python-docx定位是通过定位paragraphs来实现,指定位置插入表格只能插入在指定paragraphs之后而不是之前,所以只能曲线救国。

具体代码如下:

python docx 合并文档 图片_Python和Word的交互批量生成报告_第2张图片

程序处理速度很快,每秒钟大概6-7个文件,输出效果如下:

python docx 合并文档 图片_Python和Word的交互批量生成报告_第3张图片

你可能感兴趣的:(python,docx,合并文档,图片,Python批量处理表格有用吗,word文档通配符换行)