使用Openpyxl对比两个工作表单元格值 解决差值输出异常问题
问题根因
- 代码采用四层嵌套循环,没有对两个工作表的同位置列做匹配,会出现列错位对比的问题
- 直接修改了m2工作表的cell2值,下一轮循环读取cell2.value时已经是拼接好的带箭头的字符串,不是原始数值,因此会出现多次拼接的链式结果
- break逻辑错误,只要遇到一个相同值就终止m2侧的遍历,无法完成全列匹配
修正代码
两个工作表格式完全一致,直接按列索引一一对应对比即可,无需嵌套遍历m2的所有列:
# 先分别取出两个表待对比的列对象,按顺序存入列表 m1_cols = list(m1.iter_cols(min_row=uniqueID.row, max_row=uniqueID.row, min_col=start, max_col=last)) m2_cols = list(m2.iter_cols(min_row=uniqueID2.row, max_row=uniqueID2.row, min_col=start2, max_col=last2)) # 按索引一一对应遍历同位置列 for idx in range(len(m1_cols)): cell_m1 = m1_cols[idx][0] cell_m2 = m2_cols[idx][0] # 对比原始值 if cell_m1.value != cell_m2.value: delta_value = f"{str(cell_m1.value)} ---> {str(cell_m2.value)}" cell_m2.value = delta_value
注意事项
- 请提前确认
start到last的列数和start2到last2的列数完全一致,避免索引越界 - 若需要保留m2的原始值,可以先把m2的原始值批量读取存入列表后再做对比,不要在遍历过程中直接修改单元格内容
- 原代码中的
printed变量未定义逻辑,如果需要控制差值的输出规则,可自行添加对应判断条件
内容的提问来源于stack exchange,提问作者Alexia M.
相关产品推荐
相关产品推荐

