影刀RPA分享第128期|Python批量实现文本部分亮Excel文本,效率直接拉满!
评论
收藏

影刀RPA分享第128期|Python批量实现文本部分亮Excel文本,效率直接拉满!

经验分享
小可耐教你学影刀RPA【哔哩哔哩同名】
2025-10-31 09:29·浏览量:1043
小可耐教你学影刀RPA【哔哩哔哩同名】
影刀高级开发者
发布于 2025-10-31 09:291043浏览


大家好呀!在日常办公中,你是不是也遇到过这样的场景:Excel表格里数据成千上万,要手动找出所有包含特定文本的单元格并高亮标记,眼睛都看酸了还容易漏?今天就给大家分享一个硬核技巧——用Python自动查找并高亮Excel中的目标文本,几行代码搞定重复劳动,效率直接翻倍!

本文适用人群:职场办公族、Python入门学习者、数据处理从业者;核心工具:Python+pywin32;实现效果:批量定位目标文本并高亮,支持自定义颜色。

一、为什么要选Python做Excel文本高亮?

可能有小伙伴会问,Excel自带的“查找和替换”不也能定位文本吗?但自带功能有两个明显局限:一是无法直接批量高亮匹配文本,找到后还得手动设置格式;二是面对复杂数据(如合并单元格、多工作表)时,灵活性极差。

而用Python实现有3大优势:① 全自动批量处理,支持多工作表、大数据量;② 可自定义高亮颜色、匹配规则,适配不同场景;③ 可集成到其他办公自动化流程,实现“一键操作”。

二、前期准备:环境搭建三步走

在开始写代码前,我们需要先搭建好运行环境,总共三步,新手也能轻松搞定!

1. 安装Python环境

如果还没安装Python,直接去官网(https://www.python.org/)下载对应系统的版本(建议3.7及以上),安装时勾选“Add Python to PATH”,一路下一步即可。

2. 安装核心依赖库

本文需要用到两个关键库:xbot(提供Excel自动化等功能)和pywin32(实现Python与Excel的VBA交互)。

打开电脑的“命令提示符”(Win+R输入cmd),输入以下命令安装:

pip install xbot pywin32

如果安装pywin32时出现错误,Windows用户可以尝试用下面的命令:

pip install pypiwin32

3. 开启Excel宏安全设置

因为代码中需要动态添加VBA宏来实现文本高亮,所以要先开启Excel的宏权限:

  • 打开Excel,点击“文件”→“选项”→“信任中心”→“信任中心设置”;
  • 选择“宏设置”,勾选“信任对VBA项目对象模型的访问”;
  • 点击“确定”,关闭Excel后重新打开生效。

三、核心代码解析:读懂每一行的作用

下面我们逐行解析核心代码,不仅要会用,还要懂原理!先放完整代码,再分模块讲解:

# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块

import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv

def main(args):
    pass

import win32com.client

def highlight_all_matches(excel_instance, sheet_name, target_text, color_bgr=0x00FF00):
    """
    在指定工作表中查找所有包含 target_text 的单元格,并将匹配的文本高亮为指定颜色。
    依赖 pywin32 + VBA 宏执行方式。
    """
    wb = excel_instance.workbook
    app = wb.Application
    sheet = wb.Worksheets(sheet_name)
    vb_proj = wb.VBProject

    # === 1. 动态添加 VBA 模块 ===
    module = vb_proj.VBComponents.Add(1)
    vba_code = '''
Sub HighlightText(cellAddress As String, text As String, color As Long)
    Dim rng As Range
    Set rng = ActiveSheet.Range(cellAddress)
    If rng Is Nothing Then Exit Sub
    Dim pos As Long
    Dim val As String
    val = rng.Value
    pos = InStr(1, val, text)
    Do While pos > 0
        rng.Characters(pos, Len(text)).Font.Color = color
        pos = InStr(pos + Len(text), val, text)
    Loop
End Sub
'''
    module.CodeModule.AddFromString(vba_code)

    # === 2. 查找并调用宏 ===
    used_range = sheet.UsedRange
    rows = used_range.Rows.Count
    cols = used_range.Columns.Count

    total = 0
    for r in range(1, rows + 1):
        for c in range(1, cols + 1):
            cell = sheet.Cells(r, c)
            val = str(cell.Value) if cell.Value is not None else ""
            if target_text in val:
                addr = cell.Address
                try:
                    app.Run("HighlightText", addr, target_text, color_bgr)
                    total += 1
                except Exception as e:
                    print(f"⚠️ 单元格 {addr} 高亮失败: {e}")

    # === 3. 删除宏模块 ===
    wb.VBProject.VBComponents.Remove(module)
    print(f"✅ 已完成:共高亮 {total} 个单元格中匹配的文本。")

1. 导入依赖模块

import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
import win32com.client

这部分是导入实现功能所需的库:

  • xbot:提供Excel自动化、日志等基础功能;
  • package:用于访问当前应用数据,如全局变量、元素等;
  • win32com.client:关键库,实现Python与Excel的VBA交互,动态添加宏。

2. 核心函数定义:highlight_all_matches

这个函数是整个功能的核心,接收4个参数:

  • excel_instance:Excel实例对象,用于关联当前操作的Excel文件;
  • sheet_name:要操作的工作表名称,如“Sheet1”;
  • target_text:要查找的目标文本,如“Python”;
  • color_bgr:高亮颜色的BGR值,默认0x00FF00(绿色),可自定义。

3. 动态添加VBA宏模块

为什么要加VBA宏?因为Python直接操作Excel文本高亮时,无法精准定位单元格内的部分文本(只能给整个单元格上色),而VBA的Characters方法可以实现局部文本着色,所以我们动态添加一个VBA子程序来实现这个功能。

module = vb_proj.VBComponents.Add(1)
vba_code = '''
Sub HighlightText(cellAddress As String, text As String, color As Long)
    Dim rng As Range
    Set rng = ActiveSheet.Range(cellAddress)
    If rng Is Nothing Then Exit Sub
    Dim pos As Long
    Dim val As String
    val = rng.Value
    pos = InStr(1, val, text)
    Do While pos > 0
        rng.Characters(pos, Len(text)).Font.Color = color
        pos = InStr(pos + Len(text), val, text)
    Loop
End Sub
'''
module.CodeModule.AddFromString(vba_code)

VBA代码解析:

  • 接收单元格地址、目标文本、颜色三个参数;
  • InStr函数查找文本在单元格中的位置;
  • 通过Do While循环遍历所有匹配项,用Characters(pos, Len(text))定位局部文本并设置颜色。

4. 遍历单元格并调用宏高亮

used_range = sheet.UsedRange
rows = used_range.Rows.Count
cols = used_range.Columns.Count

total = 0
for r in range(1, rows + 1):
    for c in range(1, cols + 1):
        cell = sheet.Cells(r, c)
        val = str(cell.Value) if cell.Value is not None else ""
        if target_text in val:
            addr = cell.Address
            try:
                app.Run("HighlightText", addr, target_text, color_bgr)
                total += 1
            except Exception as e:
                print(f"⚠️ 单元格 {addr} 高亮失败: {e}")

这部分是核心执行逻辑:

  • used_range:获取工作表的已使用区域,避免遍历空单元格浪费时间;
  • 双重循环:遍历已使用区域的每一个单元格;
  • 文本匹配:判断单元格内容是否包含目标文本,若包含则调用VBA宏进行高亮;
  • 计数与异常处理:统计高亮成功的单元格数量,捕获并打印失败的单元格信息。

5. 删除宏模块并输出结果

wb.VBProject.VBComponents.Remove(module)
print(f"✅ 已完成:共高亮 {total} 个单元格中匹配的文本。")

执行完高亮后,删除动态添加的VBA模块(避免残留占用资源),并打印最终的执行结果,让我们清晰知道处理了多少个单元格。

四、实操演示:一步一步跑起来

光看懂代码还不够,我们用一个实际案例演示如何运行,以“高亮Excel中所有包含‘Python’的文本”为例:

1. 准备测试文件

新建一个Excel文件,命名为“测试数据.xlsx”,在“Sheet1”中输入一些包含“Python”的数据,比如:

序号学习内容备注
1Python基础语法入门必备
2Excel自动化用Python实现
3Python数据分析重点掌握

2. 编写调用代码

在之前的代码基础上,我们在main函数中添加调用逻辑(当模块作为流程独立运行时执行):

def main(args):
    # 1. 打开Excel文件(替换为你的文件路径)
    excel_path = r"C:\Users\XXX\Desktop\测试数据.xlsx"
    excel_instance = xbot.excel.open(excel_path)
    sleep(1)  # 等待Excel打开完成
    
    # 2. 调用高亮函数:高亮Sheet1中的"Python"文本,颜色为绿色(默认)
    highlight_all_matches(
        excel_instance=excel_instance,
        sheet_name="Sheet1",
        target_text="Python"
    )
    
    # 3. 保存并关闭Excel
    excel_instance.workbook.Save()
    excel_instance.quit()
    print("📁 Excel文件已保存并关闭")

3. 运行代码并查看结果

  1. 将代码保存为“excel_highlight.py”,确保测试Excel文件路径正确;
  2. 打开命令提示符,切换到代码所在文件夹,输入命令运行:python excel_highlight.py
  3. 运行完成后,打开Excel文件,会发现所有包含“Python”的文本都被绿色高亮了,同时命令行输出执行结果: ✅ 已完成:共高亮 3 个单元格中匹配的文本。
    📁 Excel文件已保存并关闭

五、自定义拓展:满足你的个性化需求

掌握了基础用法后,我们可以根据需求进行拓展,这里分享两个常用的自定义场景:

1. 修改高亮颜色

函数中的color_bgr参数是BGR颜色值,我们可以修改它来更换高亮颜色,比如:

  • 红色:0x0000FF
  • 黄色:0x00FFFF
  • 蓝色:0xFF0000

修改调用代码示例(改为红色高亮):

highlight_all_matches(
    excel_instance=excel_instance,
    sheet_name="Sheet1",
    target_text="Python",
    color_bgr=0x0000FF  # 红色
)

2. 多工作表批量处理

如果要处理Excel中的多个工作表,只需添加一个工作表名称列表,循环调用函数即可:

def main(args):
    excel_path = r"C:\Users\XXX\Desktop\测试数据.xlsx"
    excel_instance = xbot.excel.open(excel_path)
    sleep(1)
    
    # 要处理的工作表列表
    sheet_names = ["Sheet1", "Sheet2", "Sheet3"]
    target_text = "Python"
    
    for sheet in sheet_names:
        print(f"🔍 正在处理工作表:{sheet}")
        highlight_all_matches(
            excel_instance=excel_instance,
            sheet_name=sheet,
            target_text=target_text
        )
    
    excel_instance.workbook.Save()
    excel_instance.quit()
    print("📁 所有工作表处理完成")

六、常见问题解答(FAQ)

运行过程中遇到问题?别慌,看看这些常见问题的解决办法:

Q1:安装pywin32时提示“安装失败”?

A:尝试用管理员身份打开命令提示符,再执行安装命令;如果还是失败,去pywin32官网下载对应Python版本的安装包手动安装。

Q2:运行代码时提示“无法访问VBA项目对象模型”?

A:回到“前期准备”的第3步,重新检查Excel宏安全设置,确保“信任对VBA项目对象模型的访问”已勾选,并且关闭Excel后重新打开。

Q3:高亮后Excel文件提示“包含宏”,有风险吗?

A:没有风险!我们的代码在执行完后已经删除了动态添加的宏模块,提示是Excel的常规提示,点击“启用内容”即可正常使用。

七、总结:把时间花在更有价值的事上

今天分享的Python批量高亮Excel文本技巧,本质上是“Python+VBA”的协同作战,既利用了Python的自动化优势,又借助了VBA的精准文本操作能力。除了文本高亮,这个思路还可以拓展到更多场景,比如批量替换文本、给特定文本添加批注等。

办公自动化的核心就是“把重复的工作交给代码”,省下的时间可以用来学习、提升自己,这才是最高效的工作方式呀!



ai润色 主要看核心代码


收藏1
全部评论1
最新
发布评论
评论