
本文介绍使用openpyxl库将excel中某一列的每个单元格值,逐个与另一列进行存在性比对,并自动写入布尔结果(true/false),适用于数据清洗、重复校验等场景。
本文介绍使用openpyxl库将excel中某一列的每个单元格值,逐个与另一列进行存在性比对,并自动写入布尔结果(true/false),适用于数据清洗、重复校验等场景。
在实际数据分析工作中,常需判断某列中的每个值是否存在于另一列中(例如:验证“待查名单”是否已在“主数据库”中出现)。不同于逐行对比,这种“单元格 vs 整列”的匹配属于典型的单点对集合查找任务。Python中推荐使用 openpyxl 库直接操作Excel公式,既高效又无需加载全部数据到内存。
核心思路是:在目标列(如B列)中为每一行写入一个Excel原生公式 =COUNTIF(C$3:C$18, A3)>0。该公式会统计列C指定范围内等于A3的单元格个数,大于0即返回 TRUE,否则为 FALSE。$ 符号确保列C的范围在向下填充时保持固定,而A列引用随行号动态变化。
以下为完整可执行代码示例:
from openpyxl import load_workbook
# 加载工作簿和工作表(请替换为你的文件路径)
wb = load_workbook("data.xlsx")
sheet = wb.active # 或指定 sheet = wb["Sheet1"]
# 假设数据从第3行开始,A列为待查列,C列为参考列,C3:C18为查找范围
start_row, end_row = 3, 12 # B列结果写入范围:B3 ~ B12
ref_col_range = "C$3:C$18" # 固定引用范围(绝对地址)
for row_num in range(start_row, end_row + 1):
cell_address = f"B{row_num}"
formula = f'=COUNTIF({ref_col_range},A{row_num})>0'
sheet[cell_address] = formula
# 保存结果(注意:公式将在Excel中实时计算,打开后可见TRUE/FALSE)
wb.save("data_with_match_result.xlsx")
✅ 注意事项:
- 公式写入后需在Excel中打开才能看到计算结果(openpyxl本身不解析公式,仅写入);
- 若需纯Python计算(脱离Excel环境),可用 pandas 实现:df['B'] = df['A'].isin(df['C']);
- 行号范围(如 3 到 12)需根据实际数据起止位置调整;
- 使用 $ 锁定列C范围(C$3:C$18)是关键,避免拖拽时范围偏移。
该方法兼顾性能与兼容性,特别适合处理中等规模Excel文件(万行以内),且结果可直接被业务人员复用——无需额外编程基础即可理解与维护。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











