处理 Excel 数据时,重复行不仅会膨胀文件体积,更可能干扰后续的统计与分析结果。面对这一高频痛点,这里分享两套高效方案:一套基于 Python 实现批量自动化,另一套利用 Excel 内置 VBA 进行轻量级操作。你可以根据实际场景选择最合适的路径。
方案对比与选型
| 特性 | Python (Free Spire.XLS) | Excel VBA |
|---|---|---|
| 操作环境 | 需安装 Python + Spire.XLS 库 | 无需额外安装,Excel 原生支持 |
| 适用场景 | 批量处理多文件、跨平台任务 | 单个文件快速处理、办公场景 |
| 格式兼容性 | 保留 Excel 原生格式、公式、样式 | 完全原生操作,格式无损耗 |
| 学习成本 | 入门级 Python 语法,代码可复用 | 简单 VBA 语法,仅需掌握核心判重逻辑 |
| 自动化能力 | 可集成到批量脚本、定时任务 | 仅在 Excel 内运行,适合单次操作 |
方案一:Python 自动化处理
Free Spire.XLS for Python 是一款无需安装 Microsoft Excel 即可操作文件的免费库,特别适合需要批量处理多个文件或集成到自动化流程的场景。
1. 环境准备
首先通过 pip 安装依赖库:
pip install Spire.Xls.Free
注:免费版有特定功能限制,具体请参考官方文档说明。
2. 完整代码实现
from spire.xls import *
# 创建 Workbook 实例
workbook = Workbook()
workbook.LoadFromFile("duplicates.xlsx")
sheet = workbook.Worksheets[0]
# 配置关键参数
key_column = 1 # A 列(Spire.XLS 中列号从 1 开始)
last_row = sheet.LastRow
# 定义要处理的范围
data_range = sheet.Range[f"A1:A{last_row}"]
# 用于跟踪已出现的值(去重核心)
seen_values = set()
rows_to_remove = []
# 获取总行数
row_count = data_range.Rows.Length
# 核心逻辑:从最后一行向前遍历
for i in range(row_count, 0, -1):
# 获取单元格值并标准化
cell = data_range[i, key_column]
cell_value = (cell.DisplayedText).strip()
cell_value cell_value seen_values:
rows_to_remove.append(i)
:
seen_values.add(cell_value)
row rows_to_remove:
sheet.DeleteRow(row)
workbook.SaveToFile(, ExcelVersion.Version2016)
workbook.Dispose()


