一、简介

大家好,又是办公自动化系列!

之前讲过很多基于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(2550255# 设置字体颜色
        # 最后切记保存
        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(2550255)

至此,整个需求就圆满完成了,附上完整代码:

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(25500)

    docx.save(mkdir_path + '/' + os.path.basename(file))

5.写在最后

通过本文的Python自动化脚本制作过程,我们可以再次感受一下Python办公自动化的强大! 如果对自动化代码和数据感兴趣,可以在后台回复自动化获取。

当然,除了调整Word的字体颜色外,其他大部分的样式调整都可以使用Python完成,或者结合Excel、PPT,留给读者自行开发。

最后希望大家能够明白,Python办公自动化的核心之一就是批量操作——解放双手,将复杂的工作自动化!

Python学习交流群

为了让大家实时交流和学习更多,我们建了一个Python学习交流群。 想进群的同学可以加下面小助手微信,他会拉大家进群~