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

使用openpyxl对比Excel中GUID与指定数组,修复结果列写入异常

两段openpyxl代码的错误分析与修正方案

第一段代码错误分析与修正

错误原因

  • 嵌套循环逻辑混乱:外层遍历converted_data(每行的字典数据),内层又重复遍历所有行号,导致每次外层循环都会覆盖所有Result列单元格,最终只有最后一次循环的结果生效。
  • 变量i的使用逻辑错误:代码先给cell.value = i,但此处i是之前读取行的循环变量,后续赋值为结果字符串后,所有单元格都会被覆盖成同一个值,完全没对应到每行的实际GUID。
  • 仅硬编码对比单个GUID,未使用指定的GUID数组,无法匹配多个目标GUID。

修正后的代码

from openpyxl import load_workbook
from openpyxl.styles import Font

wb = load_workbook(r'filepath', data_only=True)
ws = wb['TDSheet']

rows = ws.max_row
# 定义要对比的GUID集合(用集合可提升查询效率)
target_guids = {'f4407e0e-0e7e-11e9-b803-0cc47a6c65db', 'f4407e0d-0e7e-11e9-b803-0cc47a6c65db'}

# 添加Result列表头并设置样式
ws["M1"] = 'Result'
ws["M1"].font = Font(bold=True)

# 直接遍历数据行(从第2行开始)
for row_num in range(2, rows + 1):
    # 通过表头找到GUID列的位置,避免硬编码列索引
    guid_col = ws.cell(row=1, value="GUID").column
    current_guid = ws.cell(row=row_num, column=guid_col).value
    
    # 判断当前GUID是否在目标集合中
    ws.cell(row=row_num, column=13).value = 'GUID found' if current_guid in target_guids else 'GUID not found'

wb.save('test_Excel.xlsx')

第二段代码错误分析与修正

错误原因

  • 行/列遍历逻辑颠倒:for col in ws是遍历工作表的每一列,而非每一行,col[7].value取的是该列第8行的单元格值,完全不是每行的GUID数据。
  • 三层嵌套循环逻辑错误:遍历错误获取的g、目标gc后又遍历所有行,导致每次循环都会覆盖所有Result单元格,最终仅保留最后一次循环的结果。
  • 未对应行号赋值:获取的GUID与行号完全不匹配,无法给对应行标记正确结果。

修正后的代码

from openpyxl import load_workbook
from openpyxl.styles import Font

wb = load_workbook(r'filepath', data_only=True)
ws = wb['TDSheet']

rows = ws.max_row
# 定义目标GUID集合
guids_control = {'f4407e0d-0e7e-11e9-b803-0cc47a6c65db', 'f4407e20-0e7e-11e9-b803-0cc47a6c65db'}

# 添加Result列表头并设置样式
ws["M1"] = 'Result'
ws["M1"].font = Font(bold=True)

# 遍历数据行(从第2行开始),假设GUID在第8列(可根据实际调整列索引)
for row_num in range(2, rows + 1):
    current_guid = ws.cell(row=row_num, column=8).value
    ws.cell(row=row_num, column=13).value = 'GUID found' if current_guid in guids_control else 'GUID not found'

wb.save('test_Excel.xlsx')

通用优化说明

  • 使用集合存储目标GUID:集合的in查询操作时间复杂度为O(1),远快于列表的O(n),数据量大时效率提升明显。
  • 直接操作工作表单元格:无需将所有数据转换成字典,节省内存且逻辑更简洁。
  • 通过表头定位GUID列:避免硬编码列索引,提升代码的通用性。

内容的提问来源于stack exchange,提问作者Pauline Rumyantseva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:05:08