在日常数据处理中,Excel 查找替换是高频操作,但当数据量较大或需要定期执行时,手动操作容易出错且效率低下。借助 Python 和免费库 Free Spire.XLS for Python,可以编程方式实现批量查找替换,无需安装 Microsoft Office。本文通过三个场景演示全表替换、区域限定替换以及基于条件的智能替换。
环境安装
通过 pip 安装 Spire.XLS.Free 库:- pip install Spire.XLS.Free
复制代码
核心对象
程序主要操作两个对象:
- Workbook:代表整个工作簿,负责加载与保存文件
- Worksheet:代表单个工作表,提供单元格查找与替换能力
导入方式:- from spire.xls import *
- from spire.xls.common import *
复制代码
场景一:全工作表中查找并替换文本
使用 Worksheet.FindAllString() 方法查找所有包含指定字符串的单元格,并替换为新文本。该方法接受三个参数:查找内容、是否区分大小写(True 为区分)、是否完全匹配(True 为精确匹配)。
以下示例将工作表中所有“总数”替换为“合计金额”,并用黄色背景标记修改的单元格:- workbook = Workbook()
- workbook.LoadFromFile("数据.xlsx")
- worksheet = workbook.Worksheets[0]
- ranges = worksheet.FindAllString("总数", False, False)
- for range in ranges:
- range.Text = "合计金额"
- range.Style.Color = Color.get_Yellow()
- workbook.SaveToFile("替换结果.xlsx", ExcelVersion.Version2016)
- workbook.Dispose()
复制代码
场景二:限定单元格区域内查找替换
当工作表数据量大或只需修改特定区域时,先获取 CellRange 对象,再调用其 FindAllString() 方法,可提升效率和准确性。
以下示例仅在 A6:C13 区域内查找“总数”并替换:- workbook = Workbook()
- workbook.LoadFromFile("数据.xlsx")
- sheet = workbook.Worksheets[0]
- range = sheet.Range["A6:C13"]
- cells = range.FindAllString("总数", False, False)
- for cell in cells:
- cell.Text = "合计金额"
- cell.Style.Color = Color.get_Yellow()
- workbook.SaveToFile("区域替换结果.xlsx", ExcelVersion.Version2016)
- workbook.Dispose()
复制代码
场景三:查找后执行条件替换
实际业务常需要根据单元格原始内容动态生成新值。例如将销售额单位从“元”转为“万元”,提取数字并除以10000:- workbook = Workbook()
- workbook.LoadFromFile("销售数据.xlsx")
- worksheet = workbook.Worksheets[0]
- ranges = worksheet.FindAllString("元", False, False)
- for range in ranges:
- original = range.Text
- try:
- num = float(original.replace("元", ""))
- range.Text = f"{num / 10000:.2f}万元"
- except:
- pass
- workbook.SaveToFile("条件替换结果.xlsx", ExcelVersion.Version2016)
- workbook.Dispose()
复制代码
总结
上述三个示例覆盖了从整表替换到区域限制、条件修改的常见需求。开发者可将其集成到自动报表生成、数据清洗脚本中,将重复性人工操作转化为自动化流程。所有代码均基于 Free Spire.XLS for Python,无需额外授权。 |