点击上方“AirPython”,选择“加为星标”
第一时间关注 Python 技术干货!
1. 前言
关于 Word 文档的读写,前面两篇文章分别进行了一次全面的总结
最全总结 | 聊聊 Python 办公自动化之 Word(上)
最全总结 | 聊聊 Python 办公自动化之 Word(中)
本篇文章作为一个办公自动化 Word 篇的一个补充,写写几个比较实用的办公场景
包含:
页眉页脚处理
合并多个文档
新增数字索引
doc 批量转 docx
对比文档差异性
特别内容标注
替换文字内容
2. 页眉页脚
每一个页面章节都包含:页眉页脚
它可以单独设置,每个页面都不一样;也可以全部设置成与首页一样
这个功能,由章节对象中的属性 different_first_page_header_footer 来控制
当值为 True 时,代表页眉页脚不同于首页,每个页面章节的页眉、页脚都可以单独设置
当值为 False 时,所有页面的页眉、页脚都一样
# 1、获取待处理页眉、页脚的章节
添加页眉页脚包含两种,分别是:普通页眉页脚、自定义样式的页眉页脚
1 - 普通页眉页脚
def add_norm_header_and_footer(header, footer, header_content, footer_content):
2 - 自带样式的页眉页脚
def add_custom_style_header_and_footer(header, footer, header_content, footer_content, style):
如果想将文档中所有的页眉、页脚删除掉,只需要 2 个步骤:
遍历文档中所有页面章节,将其 different_first_page_header_footer 属性值设置为 False
设置章节对象页眉页脚的 is_linked_to_previous 属性值为 True
PS:当 is_linked_to_previous 设置为 True 时,页眉页脚会被删除
def remove_all_header_and_footer(doc):
3. 合并多个文档
日常工作中,经常会遇到将多个 Word 文档合并成一个文件的需求
这里,可以使用另外一个 Python 依赖库:docxcompose
# 合并多个文件的依赖库
使用也非常简单,只需要下面 4 行代码,就能将多个文件进行合并,生成到一个新的文件中去
from docxcompose.composer
4. 新增数字索引
我们经常需要在文档页脚处添加页面数字索引,可惜 python-docx 并没有提供现有方法
但是,在 stackoverflow 上找到实现的方式
https://stackoverflow.com/questions/56658872/add-page-number-using-python-docx?rq=1
from docx.oxml.xmlchemy
默认生成的数字索引在页脚左下角,并不美观!
因此,这里我们可以使用 第一篇文章 的方法创建一个「文字块样式」,然后以文字块 Run 的形式,添加到页脚的第一个段落中去
# 注意:要设置页眉页脚的对齐方式,必须设置到段落上(文字块不能添加对齐方式)
需要注意的,如果需要设置页面数字索引的对齐方式,必须针对页脚的段落进行设置,修改其 alignment 属性值即可
5. doc 转 docx
python-docx 对 doc 格式的文档不太友好,要处理这类文档,我们需要先将它转换为 docx 格式
对于 Windows 系统,完全可以使用 win32com 这个模块,用命令去调用 Word 应用,打开源文件后,保存了 docx 格式的文件即可
from win32com
而对于 Mac/Linux,推荐使用 LibreOffice 去转换文档格式
# 转换格式
PS:LibreOffice 是一款由社区创造的自由免费办公套件,跨平台,内置的 soffice 可以用于文件转换
以 Mac OS 为例,我们按下面步骤来操作
官网下载 LibreOffice 软件并安装
找到 LibreOffice 软件安装目录,将 soffice 命令所在目录配置到环境变量中
重启 Pycharm
使用 os 模块下的 walk() 函数遍历所有源文件,组成一条 soffice 转换命令
执行转换命令
os
6. 对比文档差异性
两个 Word 文档的对比也是工作中比较常见的需求了
首先,遍历文档中所有段落,过滤掉空行,获取所有文本内容
# 分别获取段落内容
接着,使用 Python 中的标准依赖库 difflib 对比文字间的差异,最后生成 HTML 差异报告
import codecs
7. 特别内容标注
我们经常需要对文档中部分重要内容进行特别标注
比如,我们需要对文档中包含「 微信 」的文字块或单元格,标为红色并加粗显示
1 - 段落内容
只需要遍历出段落中所有文字块 Run,直接修改文字块的 Font 属性即可
doc = Document(file)
# 关键字的文字块或单元格标红,并加粗
# 1、修改段落中包含关键字的文件块的样式
for paragraph in doc.paragraphs:
for run in paragraph.runs:
if keyword in run.text:
# 修改颜色为红色,并加粗显示
run.font.bold = True
run.font.color.rgb = RGBColor(255, 0, 0)
2 - 表格内容
设置满足条件的单元格样式有点特别,需要经过下面 4 个步骤
获取单元格对象,获取单元格文本内容,并临时保存
清空单元格数据
单元格对象追加一个段落和一个文字块 Run,返回一个文字块对象
设置文字块对象样式,标红并加粗
for table
8. 替换文字内容
有时候,我们需要将文档中某个关键字全部替换成一个新的内容
这时候,我们可以遍历所有段落和表格,使用 replace() 函数对段落文本和单元格内容进行替换
def replace_content(self, old_content, new_content):
9. 最后
到此,Python 自动化 Word 篇的内容全部结束了!
如果实际工作中,有一些其他的业务场景文中没有覆盖到,可以在文末进行留言,后面办公自动化实战篇可能会提供对应的解决方案!
要获取全部源码,关注公众号,后台回复「 word 」即可获得全部源码
如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!
留言送书 本周赠书:《 Python数据分析入门到项目实战 》 内容简介: 本书讲解主要以Python数据分析相关内容为主,还涉及数据分析背后的数学思维。 全书内容主要分为三部分。 #一部分为Python数据分析相关技能,包括NumPy、pandas等重要的三方库的使用技巧; 二部分为数据分析相关统计学知识,主要包含构建模型的流程、思路,以及数学原理的解析; 三部分为实战,主要是结合Python数据分析工具与统 计学知识的实践作 PS:中奖名单将于下周一在交流群公布 推荐阅读最全总结 | 聊聊 Python 办公自动化之 Excel(上)最全总结 | 聊聊 Python 办公自动化之 Excel(中)最全总结 | 聊聊 Python 办公自动化之 Excel(下)最全总结 | 聊聊 Python 办公自动化之 Word(上)最全总结 | 聊聊 Python 办公自动化之 Word(中)