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

如何用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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:47:29