如何使用openpyxl按行名称和列标题更新指定单元格
问题解决方案
你的代码存在几个关键问题,导致无法正确定位并更新目标单元格:
- 变量大小写不统一:
Wb和wb是两个不同的变量,会触发命名错误 - 直接用日期字符串作为
column参数无效:openpyxl的cell方法的column参数需要整数列号,不能直接传入文本格式的列标题 - 遍历范围未覆盖完整行:
range(2, Ws.max_rows)是左闭右开区间,会漏掉最后一行数据 - 未保存工作簿:修改后未将更改写入文件
修正后的代码如下:
from openpyxl import load_workbook # 加载工作簿并定位工作表 wb = load_workbook('file.xlsx') ws = wb['VD CONQUETE DC'] # 定义目标行标识和列标题 target_row_name = 'SFR BOX HBD ECO THD' target_col_title = '2022,10,31' # 第一步:找到目标列对应的列号 target_col_num = None for col in range(1, ws.max_column + 1): if ws.cell(row=1, column=col).value == target_col_title: target_col_num = col break # 第二步:找到目标行并更新单元格 if target_col_num: for row in range(2, ws.max_row + 1): # 假设行名称存储在第3列 current_row_name = ws.cell(row=row, column=3).value if current_row_name == target_row_name: ws.cell(row=row, column=target_col_num, value=vente1date1) break # 找到目标行后直接跳出循环,提升效率 # 保存修改后的文件 wb.save('file_updated.xlsx')
代码说明:
- 先遍历工作表第一行,匹配目标列标题并记录对应列号,解决了日期字符串无法直接定位列的问题
- 统一变量命名规范,避免大小写不一致导致的错误
- 遍历行时加入终止逻辑,找到目标行后立即停止遍历,减少不必要的计算
- 增加目标列存在性判断,避免因列标题不存在引发后续错误
- 最后调用
save方法将修改写入文件,确保更改生效
内容的提问来源于stack exchange,提问作者Nisrine Benyagoub
相关产品推荐
相关产品推荐

