当前位置: 首页 > 后端技术 > Python

如何用Python快速优雅地批量修改Word文档样式?

时间:2023-03-25 22:42:25 Python

作者:陈曦来源:早起Python大家好,又是办公自动化系列!之前讲过很多基于Excel的数据和样式调整案例,今天分享一个真实的Python操作Word的自动化需求实现过程:《使用Python批量修改Word样式》将主要涉及到的综合应用os模块、glob模块、docx模块读写Word文档的综合应用及样式修改需求说明手头有几个财务分析报告的Word文档,如下:每个Word文档的内容如下:为了方便后续复习,所有单据中所有包含资金的语句都需要标红加粗,如图,步骤分析和前置知识简单复习一下相关知识,就是为了解决这个需求。一般来说,一个Word文档是由文档(document)-段落(paragraph)-文本块(run)的三层结构组成的:从需求反馈可以看出,本质上我们要做的就是运行所有包含资金的文本块。风格调整所以,这个需求的逻辑是这样的:1.新建一个空文件夹(用来存放修改后的财务报表,避免直接修改原文件)2.通过glob获取目标文件夹下的所有Word路径3.使用docx模块遍历每个Word文档,获取包含特定单词的文本块4.修改文本块的样式代码实现首先导入需要的库,设置目标文件夹路径fromdocximportDocumentfromdocx.sharedimportRGBColor,Pt,Cmimportosimportglob在这里替换创建文件夹的路径mkdir_path=r'C:\Users\xxx\new_dir'在这里替换所有文件的位置file_path=r'C:\Users\xxx\'os和glob我们很熟,这里简单介绍一下docx模块。这是一个非标准库。在命令行中,我们需要输入如下命令进行安装:pipinstallpython-docx特别注意安装时输入的是python-docx,实际调用的是一个docx实例,具体Word文档代码为:fromdocximportDocumentwordfile=Document(path)如果没有指定路径,将创建一个新的Word文档。这个和操作Excel的openpyxl不太一样,以后有机会再介绍。现在我们创建一个文件夹来存放新生成的文件,先判断文件夹是否存在,然后运行os.mkdir,如果不存在则报错os.path.exists(mkdir_path):os.mkdir(mkdir_path)然后遍历Worddocument,使用glob模块的通配符,框架如下:forfileinglob.glob(file_path+'/*.docx'):pass按照三级结构,一个文档Document有一个或多个段落Paragragh,一个段落Paragraph有一个或多个A文本块运行,合并后的代码是:forruninparagraph.runs:pass最后我们针对具体的词修改样式,遍历文本块后即可判断...forruninparagraph.runs:if'funds'inrun.text:run。font.bold=True#粗体颜色.lorrun.font.rgb=RGBColor(255,0,255)#设置字体颜色#最后记得保存docx.save(mkdir_path+'/'+os.path.basename(file))当然除了修改字体颜色和加粗之外,还支持其他样式设置,下面列出常用的供参考:boldrun.font.bold=Trueitalicrun.font.italic=真正的下划线run.font.underline=真正的删除线run.font.strike=真正的字体大小run.font.size=Pt(20)阴影run.font.shadow=真正的字体颜色run.font.color.rgb=RGBColor(255,0,255)至此,整个需求就圆满完成了,附上上面的完整代码:fromdocximportDocumentfromdocx.sharedimportRGBColor,Pt,Cmimportosimportglobmkdir_path=r'C:\xxx\new_dir)'ifnotos.path.exists(mkdir_path):os.mkdir(mkdir_path)keyword='Funding'file_path=r'C:\Users\xxx'forfileinglob.glob(file_path+'\*.docx'):docx=Document(file)forparagraphindocx.paragraphs:forruninparagraph.runs:如果run.text中的关键字:run.font.bold=Truerun.font.color.rgb=RGBColor(255,0,0)docx.save(mkdir_path+'/'+os.path.basename(file))通过在本文制作Python自动化脚本的过程中,我们可以再次体验到Python办公自动化的强大!如果对自动化代码和数据感兴趣,可以在后台回复自动化获取。当然,除了调整Word的字体颜色,其他大部分的样式调整都可以使用Python来完成,或者结合Excel和PPT来完成。这些留给读者自己去开发。