

发布于 2025-10-31 09:291043浏览大家好呀!在日常办公中,你是不是也遇到过这样的场景:Excel表格里数据成千上万,要手动找出所有包含特定文本的单元格并高亮标记,眼睛都看酸了还容易漏?今天就给大家分享一个硬核技巧——用Python自动查找并高亮Excel中的目标文本,几行代码搞定重复劳动,效率直接翻倍!
本文适用人群:职场办公族、Python入门学习者、数据处理从业者;核心工具:Python+pywin32;实现效果:批量定位目标文本并高亮,支持自定义颜色。
可能有小伙伴会问,Excel自带的“查找和替换”不也能定位文本吗?但自带功能有两个明显局限:一是无法直接批量高亮匹配文本,找到后还得手动设置格式;二是面对复杂数据(如合并单元格、多工作表)时,灵活性极差。
而用Python实现有3大优势:① 全自动批量处理,支持多工作表、大数据量;② 可自定义高亮颜色、匹配规则,适配不同场景;③ 可集成到其他办公自动化流程,实现“一键操作”。
在开始写代码前,我们需要先搭建好运行环境,总共三步,新手也能轻松搞定!
如果还没安装Python,直接去官网(https://www.python.org/)下载对应系统的版本(建议3.7及以上),安装时勾选“Add Python to PATH”,一路下一步即可。
本文需要用到两个关键库:xbot(提供Excel自动化等功能)和pywin32(实现Python与Excel的VBA交互)。
打开电脑的“命令提示符”(Win+R输入cmd),输入以下命令安装:
pip install xbot pywin32如果安装pywin32时出现错误,Windows用户可以尝试用下面的命令:
pip install pypiwin32因为代码中需要动态添加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} 个单元格中匹配的文本。")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交互,动态添加宏。这个函数是整个功能的核心,接收4个参数:
excel_instance:Excel实例对象,用于关联当前操作的Excel文件;sheet_name:要操作的工作表名称,如“Sheet1”;target_text:要查找的目标文本,如“Python”;color_bgr:高亮颜色的BGR值,默认0x00FF00(绿色),可自定义。为什么要加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))定位局部文本并设置颜色。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:获取工作表的已使用区域,避免遍历空单元格浪费时间;wb.VBProject.VBComponents.Remove(module)
print(f"✅ 已完成:共高亮 {total} 个单元格中匹配的文本。")执行完高亮后,删除动态添加的VBA模块(避免残留占用资源),并打印最终的执行结果,让我们清晰知道处理了多少个单元格。
光看懂代码还不够,我们用一个实际案例演示如何运行,以“高亮Excel中所有包含‘Python’的文本”为例:
新建一个Excel文件,命名为“测试数据.xlsx”,在“Sheet1”中输入一些包含“Python”的数据,比如:
| 序号 | 学习内容 | 备注 |
| 1 | Python基础语法 | 入门必备 |
| 2 | Excel自动化 | 用Python实现 |
| 3 | Python数据分析 | 重点掌握 |
在之前的代码基础上,我们在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文件已保存并关闭")python excel_highlight.py;✅ 已完成:共高亮 3 个单元格中匹配的文本。
📁 Excel文件已保存并关闭掌握了基础用法后,我们可以根据需求进行拓展,这里分享两个常用的自定义场景:
函数中的color_bgr参数是BGR颜色值,我们可以修改它来更换高亮颜色,比如:
修改调用代码示例(改为红色高亮):
highlight_all_matches(
excel_instance=excel_instance,
sheet_name="Sheet1",
target_text="Python",
color_bgr=0x0000FF # 红色
)如果要处理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("📁 所有工作表处理完成")运行过程中遇到问题?别慌,看看这些常见问题的解决办法:
A:尝试用管理员身份打开命令提示符,再执行安装命令;如果还是失败,去pywin32官网下载对应Python版本的安装包手动安装。
A:回到“前期准备”的第3步,重新检查Excel宏安全设置,确保“信任对VBA项目对象模型的访问”已勾选,并且关闭Excel后重新打开。
A:没有风险!我们的代码在执行完后已经删除了动态添加的宏模块,提示是Excel的常规提示,点击“启用内容”即可正常使用。
今天分享的Python批量高亮Excel文本技巧,本质上是“Python+VBA”的协同作战,既利用了Python的自动化优势,又借助了VBA的精准文本操作能力。除了文本高亮,这个思路还可以拓展到更多场景,比如批量替换文本、给特定文本添加批注等。
办公自动化的核心就是“把重复的工作交给代码”,省下的时间可以用来学习、提升自己,这才是最高效的工作方式呀!
ai润色 主要看核心代码