如何用openpyxl查找列中指定值,读取同行数据并写入第三列
解决Excel列匹配与写入问题
问题分析
你的现有代码只遍历了I列,未获取对应行的AN列数据,存在缩进错误,且缺少薪资判断、值写入的核心逻辑,同时emp_number变量未定义,这些是导致问题的原因。
修正后的完整代码
import openpyxl # 定义目标参数 target_emp_id = '555' required_salary = '1000 EUR' adjustment = '100 EUR' # 加载Excel工作簿 wb = openpyxl.load_workbook('C:/Users/Invoice Matrix .xlsx') sheet = wb['Invoicing'] # 替代过时的get_sheet_by_name方法 # 遍历数据行(假设第1行是表头,从第2行开始处理) for row in sheet.iter_rows(min_row=2, values_only=False): # 获取I列(员工编号列,对应第9列,索引为8)的单元格 id_cell = row[8] # 检查员工编号是否匹配(处理空值避免报错) if id_cell.value is not None and str(id_cell.value) == target_emp_id: # 获取同行AN列(薪资列,对应第40列,索引为39)的单元格 salary_cell = row[39] print(f"找到目标员工,薪资:{salary_cell.value}") # 检查薪资是否符合条件 if salary_cell.value is not None and str(salary_cell.value) == required_salary: # 写入C列(调整值列,对应第3列,索引为2) row[2].value = adjustment print("已成功写入调整值") # 保存修改后的文件(建议重命名避免覆盖原文件) wb.save('C:/Users/Invoice Matrix_updated.xlsx')
关键修复说明
- 替换过时的
get_sheet_by_name方法,改用wb['Invoicing']直接引用工作表,符合openpyxl最新用法 - 使用
iter_rows遍历整行,方便一次性获取同行多列数据,无需单独处理列遍历 - 明确列索引:Excel列从A开始对应索引0,所以I列是第9列(索引8),AN列是第40列(索引39),C列是第3列(索引2)
- 添加空值判断,避免因单元格为空导致字符串转换报错
- 补充薪资校验与调整值写入逻辑,完成需求闭环
- 最后必须调用
save方法,否则修改不会被保存到文件
排查要点(若仍返回False)
- 确认
target_emp_id与I列的员工编号完全一致(包括大小写、前后空格) - 检查AN列薪资的格式是否和
required_salary完全匹配(比如是否有隐藏空格、是否是数值与币种分开存储) - 验证列索引是否正确:可通过
print(sheet['AN1'].column)查看AN列的列号,减1即为对应索引 - 确认遍历起始行是否正确:如果你的数据从第1行开始,将
min_row=2改为min_row=1
内容的提问来源于stack exchange,提问作者Y.E.
相关产品推荐
相关产品推荐

