游乐游手机版
首页/编程语言/文章详情

Python实现Excel数据查找与高亮显示方法教程

时间:2026-08-15 10:23
基于Spire XLSforPython,利用FindAllString方法静态高亮文本匹配,并通过条件格式化动态突出排名、重复值、唯一值及高于 低于平均值的数据,显著提升Excel数据审查与分析效率。

在日常的数据处理工作中,快速定位关键信息往往是第一道门槛。无论是标记异常值、突出核心指标,还是识别重复数据,能够精准地高亮显示特定内容,都能让数据审查和分析的效率提升一个档次。今天,我们就来聊聊如何借助 Spire.XLS for Python 这个工具,在 Excel 里实现各种灵活的查找与高亮操作。从最基础的文本匹配,到基于条件格式的动态更新,再到排名、重复值、平均值等高级玩法,这次争取一次讲透。

环境准备

开始之前,需要先把 Spire.XLS for Python 装上,一条 pip 命令搞定:

pip install Spire.XLS

装完之后,就可以在 Python 项目里操作 Excel 文档,执行各种查找和高亮任务了。

查找并高亮的典型应用场景

在实际工作中,Excel 查找并高亮的需求几乎无处不在:

  • 数据审查:快速定位包含特定关键词的单元格,比如搜索“缺货”、“异常”。
  • 异常检测:标记超出正常范围的数据,比如销售额突然暴跌的记录。
  • 重复数据识别:一眼发现重复录入的订单号或客户信息。
  • 排名分析:突出显示销量前十的产品,或者预算后五的项目。
  • 趋势分析:标记高于或低于平均值的数值,帮你理解数据分布。
  • 关键字段标注:对重要字段加上视觉强调,避免遗漏。

Spire.XLS for Python 提供了两种主流的做法:一种是直接设置单元格背景色,适合一次性的静态高亮;另一种是用条件格式化,它最大的优势是——数据变了,高亮会自动更新。接下来逐一展开。

查找文本并高亮显示

最基础的操作:在工作表里搜索某个字符串,然后把匹配到的单元格涂上颜色。下面这个例子演示了如何查找所有包含“缺货”的单元格并标黄:

from spire.xls import *
from spire.xls.common import *

def FindAndHighlightText():
    """查找特定文本并高亮显示"""
    inputFile = "/input/销售报告.xlsx"
    outputFile = "/output/FindAndHighlight.xlsx"
    
    workbook = Workbook()
    workbook.LoadFromFile(inputFile)
    worksheet = workbook.Worksheets[0]
    
    # 查找所有包含 "缺货" 的单元格,区分大小写,完全匹配
    ranges = worksheet.FindAllString("缺货", True, True)
    
    for range in ranges:
        range.Style.Color = Color.get_Yellow()
    
    workbook.Sa veToFile(outputFile, ExcelVersion.Version2010)
    workbook.Dispose()

if __name__ == "__main__":
    FindAndHighlightText()

使用Python实现在Excel中查找数据并高亮显示

这里用到了 FindAllString() 方法,前两个布尔参数分别控制“是否区分大小写”和“是否完全匹配”。返回的是一组单元格范围,遍历后直接设置背景色即可。这种方法简单粗暴,适合一次性操作,高亮结果永久保存在文件里,不会因为数据变化而自动更新。

使用条件格式化高亮排名前后的值

条件格式化就聪明多了——它会根据单元格的实际值动态决定是否高亮。比如,你想自动挑出销售额最高的前两名和最低的后两名:

from spire.xls import *
from spire.xls.common import *

def HighlightRankedValues():
    """高亮显示排名前后的值"""
    inputFile = "/input/销售报告.xlsx"
    outputFile = "/HighlightRankedValues.xlsx"
    
    workbook = Workbook()
    workbook.LoadFromFile(inputFile)
    sheet = workbook.Worksheets[0]
    
    # 高亮范围 B3:B16 中的前 2 个最大值
    xcfs = sheet.ConditionalFormats.Add()
    xcfs.AddRange(sheet.Range["B3:B16"])
    format1 = xcfs.AddTopBottomCondition(TopBottomType.Top, 2)
    format1.FormatType = ConditionalFormatType.TopBottom
    format1.BackColor = Color.get_Red()
    
    # 高亮范围 E3:E16 中的后 2 个最小值
    xcfs1 = sheet.ConditionalFormats.Add()
    xcfs1.AddRange(sheet.Range["E3:E16"])
    format2 = xcfs1.AddTopBottomCondition(TopBottomType.Bottom, 2)
    format2.FormatType = ConditionalFormatType.TopBottom
    format2.BackColor = Color.get_ForestGreen()
    
    workbook.Sa veToFile(outputFile, ExcelVersion.Version2010)
    workbook.Dispose()

if __name__ == "__main__":
    HighlightRankedValues()

使用Python实现在Excel中查找数据并高亮显示

通过 AddTopBottomCondition() 方法,你可以指定是最大值还是最小值,以及要保留的个数。条件格式化的好处在于:如果数据更新了,高亮会自动重新计算。这在销售分析、成绩排名、性能评估等场景中特别实用,省去了手动调整的麻烦。

高亮显示重复值和唯一值

数据清理时,重复项和唯一项往往是重点关注对象。用条件格式化来实现同样很简单:

from spire.xls import *
from spire.xls.common import *

def HighlightDuplicateAndUnique():
    """高亮显示重复值和唯一值"""
    inputFile = "/input/销售报告.xlsx"
    outputFile = "/HighlightDuplicateUniqueValues.xlsx"
    
    workbook = Workbook()
    workbook.LoadFromFile(inputFile)
    sheet = workbook.Worksheets[0]
    
    # 高亮范围 C3:C16 中的重复值
    xcfs = sheet.ConditionalFormats.Add()
    xcfs.AddRange(sheet.Range["C3:C16"])
    format1 = xcfs.AddCondition()
    format1.FormatType = ConditionalFormatType.DuplicateValues
    format1.BackColor = Color.get_IndianRed()
    
    # 高亮范围 H3:H16 中的唯一值
    xcfs1 = sheet.ConditionalFormats.Add()
    xcfs1.AddRange(sheet.Range["H3:H16"])
    format2 = xcfs1.AddCondition()
    format2.FormatType = ConditionalFormatType.UniqueValues
    format2.BackColor = Color.get_Yellow()
    
    workbook.Sa veToFile(outputFile, ExcelVersion.Version2010)
    workbook.Dispose()

if __name__ == "__main__":
    HighlightDuplicateAndUnique()

使用Python实现在Excel中查找数据并高亮显示

这里使用了 ConditionalFormatType.DuplicateValuesUniqueValues,分别对应重复值和唯一值。需要注意的是,条件格式可以叠加在同一范围上,所以重复和唯一可以用不同颜色同时标记出来,非常直观。

高亮显示高于或低于平均值的数据

统计场景里,我们经常想知道哪些数据点跑偏了——高于平均或低于平均。下面的代码演示了如何为同一列数据分别用不同颜色标记:

from spire.xls import *
from spire.xls.common import *

def HighlightA verageValues():
    """高亮显示高于或低于平均值的数据"""
    inputFile = "/销售报告.xlsx"
    outputFile = "HighlightA verageValues.xlsx"
    
    workbook = Workbook()
    workbook.LoadFromFile(inputFile)
    sheet = workbook.Worksheets[0]
    
    # 高亮低于平均值的数据(天蓝)
    format1 = sheet.ConditionalFormats.Add()
    format1.AddRange(sheet.Range["E2:E10"])
    cf1 = format1.AddA verageCondition(A verageType.Below)
    cf1.BackColor = Color.get_SkyBlue()
    
    # 高亮高于平均值的数据(橙色)
    format2 = sheet.ConditionalFormats.Add()
    format2.AddRange(sheet.Range["E2:E10"])
    cf2 = format2.AddA verageCondition(A verageType.Above)
    cf2.BackColor = Color.get_Orange()
    
    workbook.Sa veToFile(outputFile, ExcelVersion.Version2010)
    workbook.Dispose()
    
    print(f"平均值高亮完成,文件已保存至: {outputFile}")

if __name__ == "__main__":
    HighlightA verageValues()

通过 AddA verageCondition() 方法,配合 A verageType.BelowA verageType.Above,就能自动把高于/低于平均值的单元格涂上颜色。这个功能在销售数据分析、成绩对比、预算监控等场景里非常实用——一眼就能看出哪些产品“拖后腿”,哪些“领跑”。

实用技巧与高级应用

组合使用查找和条件格式化

实际项目中,往往需要把多种高亮逻辑组合起来。下面封装了一个工具类 ExcelHighlighter,把文本查找、排名高亮、重复值、平均值等功能整合在一起,方便复用:

from spire.xls import *
from spire.xls.common import *

class ExcelHighlighter:
    """Excel 高亮显示工具类"""
    
    def __init__(self, input_file):
        self.workbook = Workbook()
        self.workbook.LoadFromFile(input_file)
        self.input_file = input_file
    
    def highlight_by_text(self, sheet_index, search_text, 
                         back_color=None, case_sensitive=False, 
                         exact_match=False):
        sheet = self.workbook.Worksheets[sheet_index]
        ranges = sheet.FindAllString(search_text, case_sensitive, exact_match)
        if back_color is None:
            back_color = Color.get_Yellow()
        highlight_count = 0
        for range in ranges:
            range.Style.Color = back_color
            highlight_count += 1
        print(f"工作表 '{sheet.Name}': 高亮了 {highlight_count} 个包含 '{search_text}' 的单元格")
        return highlight_count
    
    def highlight_top_values(self, sheet_index, cell_range, top_count=5,
                            back_color=None):
        sheet = self.workbook.Worksheets[sheet_index]
        if back_color is None:
            back_color = Color.get_Red()
        xcfs = sheet.ConditionalFormats.Add()
        xcfs.AddRange(sheet.Range[cell_range])
        format_rule = xcfs.AddTopBottomCondition(TopBottomType.Top, top_count)
        format_rule.FormatType = ConditionalFormatType.TopBottom
        format_rule.BackColor = back_color
        print(f"工作表 '{sheet.Name}': 在范围 {cell_range} 中高亮前 {top_count} 个最大值")
    
    def highlight_bottom_values(self, sheet_index, cell_range, bottom_count=5,
                               back_color=None):
        sheet = self.workbook.Worksheets[sheet_index]
        if back_color is None:
            back_color = Color.get_ForestGreen()
        xcfs = sheet.ConditionalFormats.Add()
        xcfs.AddRange(sheet.Range[cell_range])
        format_rule = xcfs.AddTopBottomCondition(TopBottomType.Bottom, bottom_count)
        format_rule.FormatType = ConditionalFormatType.TopBottom
        format_rule.BackColor = back_color
        print(f"工作表 '{sheet.Name}': 在范围 {cell_range} 中高亮后 {bottom_count} 个最小值")
    
    def highlight_duplicates(self, sheet_index, cell_range,
                            duplicate_color=None, unique_color=None):
        sheet = self.workbook.Worksheets[sheet_index]
        if duplicate_color is None:
            duplicate_color = Color.get_IndianRed()
        if unique_color is None:
            unique_color = Color.get_Yellow()
        xcfs = sheet.ConditionalFormats.Add()
        xcfs.AddRange(sheet.Range[cell_range])
        format1 = xcfs.AddCondition()
        format1.FormatType = ConditionalFormatType.DuplicateValues
        format1.BackColor = duplicate_color
        xcfs1 = sheet.ConditionalFormats.Add()
        xcfs1.AddRange(sheet.Range[cell_range])
        format2 = xcfs1.AddCondition()
        format2.FormatType = ConditionalFormatType.UniqueValues
        format2.BackColor = unique_color
        print(f"工作表 '{sheet.Name}': 在范围 {cell_range} 中高亮重复值和唯一值")
    
    def highlight_above_below_a verage(self, sheet_index, cell_range,
                                     above_color=None, below_color=None):
        sheet = self.workbook.Worksheets[sheet_index]
        if above_color is None:
            above_color = Color.get_Orange()
        if below_color is None:
            below_color = Color.get_SkyBlue()
        format1 = sheet.ConditionalFormats.Add()
        format1.AddRange(sheet.Range[cell_range])
        cf1 = format1.AddA verageCondition(A verageType.Above)
        cf1.BackColor = above_color
        format2 = sheet.ConditionalFormats.Add()
        format2.AddRange(sheet.Range[cell_range])
        cf2 = format2.AddA verageCondition(A verageType.Below)
        cf2.BackColor = below_color
        print(f"工作表 '{sheet.Name}': 在范围 {cell_range} 中高亮高于和低于平均值的数据")
    
    def sa ve(self, output_file=None):
        if output_file is None:
            output_file = self.input_file
        self.workbook.Sa veToFile(output_file, ExcelVersion.Version2013)
        self.workbook.Dispose()
        print(f"文件已保存至: {output_file}")

def main():
    input_file = "/SampleData.xlsx"
    highlighter = ExcelHighlighter(input_file)
    highlighter.highlight_by_text(0, "重要", Color.get_Yellow())
    highlighter.highlight_top_values(0, "D2:D20", 3, Color.get_Red())
    highlighter.highlight_bottom_values(0, "E2:E20", 3, Color.get_Green())
    highlighter.highlight_duplicates(0, "C2:C20")
    highlighter.highlight_above_below_a verage(0, "F2:F20")
    highlighter.sa ve("./Output/HighlightedData.xlsx")

if __name__ == "__main__":
    main()

这个工具类可以让你在一份 Excel 上同时做多种高亮,彼此互不干扰。比如查文本的同时,再跑一个排名高亮,再标一下重复值,都很顺手。

常见应用场景示例

场景 1:销售数据审查

def ReviewSalesData():
    highlighter = ExcelHighlighter("./Data/SalesReport.xlsx")
    # 标记所有"紧急"订单
    highlighter.highlight_by_text(0, "紧急", Color.get_Orange())
    # 高亮销售额前十的产品
    highlighter.highlight_top_values(0, "D2:D100", 10, Color.get_LightGreen())
    # 同时高亮低于平均水平的产品(浅珊瑚色)
    format1 = highlighter.workbook.Worksheets[0].ConditionalFormats.Add()
    format1.AddRange(highlighter.workbook.Worksheets[0].Range["D2:D100"])
    cf1 = format1.AddA verageCondition(A verageType.Below)
    cf1.BackColor = Color.get_LightCoral()
    highlighter.sa ve("./Output/SalesReview.xlsx")

场景 2:学生成绩分析

def AnalyzeStudentGrades():
    highlighter = ExcelHighlighter("./Data/StudentGrades.xlsx")
    # 高亮不及格(等级为F)
    highlighter.highlight_by_text(0, "F", Color.get_Red())
    # 高亮前五名
    highlighter.highlight_top_values(0, "C2:C50", 5, Color.get_Gold())
    # 同时高亮高于和低于平均分的
    highlighter.highlight_above_below_a verage(0, "C2:C50")
    highlighter.sa ve("./Output/GradeAnalysis.xlsx")

场景 3:库存管理

def ManageInventory():
    highlighter = ExcelHighlighter("./Data/Inventory.xlsx")
    # 库存为零的标红
    highlighter.highlight_by_text(0, "0", Color.get_Red())
    # 库存最低的10种产品标黄
    highlighter.highlight_bottom_values(0, "D2:D200", 10, Color.get_Yellow())
    # 重复的产品编号也标出来
    highlighter.highlight_duplicates(0, "A2:A200")
    highlighter.sa ve("./Output/InventoryReview.xlsx")

最佳实践与注意事项

选择合适的高亮方法

  • 静态高亮:直接设置 range.Style.Color,适合一次性操作,数据变了需要手动重新执行。
  • 动态高亮:使用条件格式化,数据更新后高亮自动跟随变化,更推荐在需要持续跟踪的场景中使用。

颜色选择建议

  • 警告/错误:红色或橙色系,醒目且传递紧张感。
  • 成功/优秀:绿色或金色系,传递积极信息。
  • 信息/中性:蓝色或黄色系,适合常规标注。
  • 避免眼花缭乱:建议同一张表内不超过3~4种颜色,否则反而干扰阅读。

性能考虑

  • 缩小范围:只在需要检查的单元格区域应用条件格式化,不要全表选中。
  • 减少规则数量:同一个区域叠加太多条件格式化规则会拖慢 Excel 打开速度。
  • 及时释放资源:操作完后调用 Dispose() 方法释放内存。

常见问题与解决方案

问题 1:高亮颜色不明显
解决方案:选择对比度高的颜色,或者同时修改字体颜色(比如浅色背景配深色字体)。

问题 2:条件格式化不生效
解决方案:检查单元格范围是否写正确,确认数据类型一致(文本类型与数字类型不能混用)。

问题 3:文件体积过大
解决方案:减少条件格式化规则的数量,避免在超大范围内应用复杂规则。

总结

这次重点聊了如何用 Spire.XLS for Python 在 Excel 中实现各种查找与高亮操作。从最直接的 FindAllString() 文本定位加背景色,到条件格式化的排名、重复值、唯一值、平均值等动态高亮,都给出了完整的代码实例。最后还提供了一个可复用的工具类,方便你在实际项目中快速组装。掌握了这些方法,无论是日常的数据审查、业务分析还是质量控制,都能更高效地从数据中提取关键信息,提升工作的精准度和效率。

来源:https://www.jb51.net/python/364959aig.htm
上一篇Debian系统中Node.js缓存策略设置方法与优化建议 下一篇Java普通类抽象类接口的区别与应用场景解析
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Yum怎么查找已安装软件包及安装信息
编程语言 · 2026-08-17

Yum怎么查找已安装软件包及安装信息

使用yumlistinstalled列出所有已安装软件包,配合grep可快速过滤特定软件;yuminfo查看元数据和安装状态;yumsearch通过关键词搜索包名。以上命令均需sudo权限执行。

Debian系统中Python与Java互操作方法详解
编程语言 · 2026-08-17

Debian系统中Python与Java互操作方法详解

在Debian系统中,Python与Java互操作有五种方案:Jython直接调用Java类库但仅支持Python2;GraalVM实现多语言高性能协作;JNI底层灵活但复杂度高;Web服务通过RESTfulAPI解耦;消息队列支持异步解耦。各方案适用场景不同,需根据需求选择。

@FunctionalInterface校验逻辑与函数式接口强制约束规范
编程语言 · 2026-08-17

@FunctionalInterface校验逻辑与函数式接口强制约束规范

@FunctionalInterface 这个注解在 Java 开发中很常见,很多人都用过,但真正彻底理解它作用的人,其实并不算多。归根结底,它本质上是一种编译期契约声明,同时也是编译器进行强制校验的一道安全锁。它不会在运行时改变接口行为,也不会给接口增加任何额外能力。但不要因此低估它——在提升代码

Ubuntu上如何测试JavaScript性能与运行效率
编程语言 · 2026-08-17

Ubuntu上如何测试JavaScript性能与运行效率

Ubuntu上JavaScript性能测试实用指南 一 测试类型与指标 在Ubuntu环境中进行JavaScript性能测试,首先要明确测试目标。从实际项目经验来看,JS性能测试通常可以分为三大类,不同类型关注的性能指标也不一样: 前端页面与渲染性能:核心指标包括FPS(帧率)、长任务、布局与重绘,

LNMP环境容量规划怎么做更合理
编程语言 · 2026-08-17

LNMP环境容量规划怎么做更合理

LNMP环境容量规划需评估CPU、内存、磁盘I O等现状,明确响应时间等关键指标,基于历史流量预测负载,倒推服务器资源,设计水平或垂直扩展方案,通过压测验证,并持续监控调整,定期备份恢复,记录决策并同步团队。