一、简介
大家好,又是办公自动化系列!
之前讲过很多基于Excel的数据和样式调整案例,今天分享一个Python操作Word的真实自动化需求实现过程:
《使用Python批量修改Word样式》
主要会涉及
2.需求说明
手上有几份财务分析报告的Word文档,如下:
每个Word文档的内容如下:
为了方便后续审核,所有文件中所有包含资金的报表都需要用红色加粗标注,如图
3.步骤分析和前置知识
为了解决这个需求,简单复习一下相关知识。 Word文档一般由文档(document)-段落(paragraph)-文本块(run)三级结构组成:
从需求反馈可以看出wps批量替换,本质上我们需要做的是调整所有包含资金运行的文本块的样式
所以,这个需求的逻辑是这样的:
4.代码实现
首先导入需要的库并设置目标文件夹路径
from docx import Document
from docx.shared import RGBColor, Pt, Cm
import os
import glob
# 此处更换创建文件夹的路径
mkdir_path = r'C:Usersxxxnew_dir'
# 此处更换所有文件所在的位置
file_path = r'C:Usersxxx'
我们对 os 和 glob 非常熟悉。 这里简单介绍一下docx模块。 这是一个非标准库。 在命令行中,我们需要输入如下命令进行安装:
pip install python-docx
特别需要注意的是,安装时输入的是python-docx,实际调用时是docx
实例化具体Word文档的代码为:
from docx import Document
wordfile = Document(path)
如果不指定路径,将创建一个新的 Word 文档。 这和操作Excel的openpyxl是不一样的。 有机会我再介绍一下。
现在我们新建一个文件夹存放新生成的文件,先判断文件夹是否存在,然后运行os.mkdirwps批量替换,避免不存在报错
if not os.path.exists(mkdir_path):
os.mkdir(mkdir_path)
然后遍历Word文档,使用glob模块的通配符,框架如下:
for file in glob.glob(file_path + '/*.docx'):
pass
按照三级结构,一个文档Document有一个或多个段落Paragragh,一个段落Paragraph有一个或多个文本块Run。 合并后的代码是:
for file in glob.glob(file_path + '/*.docx'):
docx = Document(file)
for paragraph in docx.paragraphs:
for run in paragraph.runs:
pass
最后我们针对具体的词修改样式,遍历到文本块后就可以进行判断了
...
for run in paragraph.runs:
if '资金' in run.text:
run.font.bold = True # 加粗
run.font.color.rgb = RGBColor(255, 0, 255) # 设置字体颜色
# 最后切记保存
docx.save(mkdir_path + '/' + os.path.basename(file))
当然,除了修改字体颜色和粗体,也支持其他样式设置。 下面列出常用的供参考:
# 加粗
run.font.bold = True
# 斜体
run.font.italic = True
# 下划线
run.font.underline = True
# 删除线
run.font.strike = True
# 字号
run.font.size = Pt(20)
# 阴影
run.font.shadow = True
# 字体颜色
run.font.color.rgb = RGBColor(255, 0, 255)
至此,整个需求就圆满完成了,附上完整代码:
from docx import Document
from docx.shared import RGBColor, Pt, Cm
import os
import glob
mkdir_path = r'C:xxxnew_dir)'
if not os.path.exists(mkdir_path):
os.mkdir(mkdir_path)
keyword = '资金'
file_path = r'C:Usersxxx'
for file in glob.glob(file_path + '*.docx'):
docx = Document(file)
for paragraph in docx.paragraphs:
for run in paragraph.runs:
if keyword in run.text:
run.font.bold = True
run.font.color.rgb = RGBColor(255, 0, 0)
docx.save(mkdir_path + '/' + os.path.basename(file))
5.写在最后
通过本文的Python自动化脚本制作过程,我们可以再次感受一下Python办公自动化的强大! 如果对自动化代码和数据感兴趣,可以在后台回复自动化获取。
当然,除了调整Word的字体颜色外,其他大部分的样式调整都可以使用Python完成,或者结合Excel、PPT,留给读者自行开发。
最后希望大家能够明白,Python办公自动化的核心之一就是批量操作——解放双手,将复杂的工作自动化!
Python学习交流群
为了让大家实时交流和学习更多,我们建了一个Python学习交流群。 想进群的同学可以加下面小助手微信,他会拉大家进群~