如何在openpyxl中实现A列对应B列的动态数据写入?
问题分析与修复方案
你的代码存在几个关键问题导致无法正常工作:
- 嵌套了完全不必要的B列遍历循环,逻辑冗余且混乱
- 赋值时使用
sheet_obj[cel]是错误的,cel是单元格对象,而非单元格坐标字符串(如"B2"),openpyxl无法通过对象索引定位单元格 - 内层循环重复遍历A列单元格,导致逻辑错误
- 缺少保存工作簿的步骤,即使赋值成功也不会写入文件
修正后的代码
import openpyxl # 替换为你的文件路径 path = "your_excel_file.xlsx" wb_obj = openpyxl.load_workbook(path) sheet_obj = wb_obj.active # 遍历A列第2到25行的单元格 for row in range(2, 26): # 获取A列当前行的单元格 a_cell = sheet_obj[f"A{row}"] print(a_cell.value) # 获取输入并转为整数,写入对应B列单元格 input_value = int(input("请输入对应内容:")) sheet_obj[f"B{row}"] = input_value # 必须保存工作簿,否则修改不会生效 wb_obj.save(path)
另一种更直观的写法(使用单元格对象)
如果你习惯用iter_cols遍历单元格,可以这么写:
import openpyxl path = "your_excel_file.xlsx" wb_obj = openpyxl.load_workbook(path) sheet_obj = wb_obj.active # 遍历A列第2-25行的所有单元格 for col in sheet_obj.iter_cols(min_row=2, max_col=1, max_row=25): for a_cell in col: print(a_cell.value) input_value = int(input()) # 通过offset获取同一行的B列单元格(列偏移1) b_cell = a_cell.offset(column=1) b_cell.value = input_value wb_obj.save(path)
关键修复点说明
- 去掉冗余的嵌套循环,直接针对每一行的A、B列单元格操作
- 使用正确的单元格定位方式:要么通过坐标字符串(
f"B{row}"),要么用单元格对象的offset方法获取同行的B列单元格 - 添加
wb_obj.save(path)步骤,确保修改写入到文件中
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

