使用Openpyxl修改已有Excel单元格值不生效问题咨询
问题原因
你代码的核心问题出在iter_rows的values_only=True参数:该参数会让迭代仅返回单元格值的只读快照,部分版本的openpyxl在该模式下会阻断写入操作的同步,导致你对单元格的赋值没有实际生效。同时你使用的get_sheet_by_name是已废弃的旧API,也可能引发兼容问题,另外没有处理首行A列为空的边界场景,会出现变量未定义的报错。
修复后的实现代码
import openpyxl path = 'mypath/Python/Excel_test.xlsx' workbook = openpyxl.load_workbook(path) # 用索引方式替代废弃的get_sheet_by_name方法 worksheet = workbook['Tabelle1'] prev_text = None # 移除values_only参数直接操作单元格对象,限定只遍历A列提升效率 for row_idx, row in enumerate(worksheet.iter_rows(min_col=1, max_col=1), start=1): current_cell = row[0] if current_cell.value is not None: prev_text = current_cell.value else: current_cell.value = prev_text workbook.save('test.xlsx')
优化点说明
- 用
enumerate方法自动计数行号,避免手动维护变量i出现的计数错误 - 限定遍历范围仅为A列,减少不必要的性能开销
- 采用Python官方推荐的
is not None做空值判断,逻辑更严谨 - 提前初始化保存上一个非空值的变量,避免首行A列为空时出现变量未定义的报错
内容的提问来源于stack exchange,提问作者Sp33dy
相关产品推荐
相关产品推荐

