You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:39:04