openpyxl写入异常:非'01'条件下无法向单元格写入数据
解决openpyxl写入单元格异常问题
问题分析
你遇到的情况是:当判断record['week'] == '02'时,代码能进入分支并打印日志,但数据无法写入单元格;仅'01'时正常。核心是写入操作执行了但未生效,大概率是以下几个原因导致。
排查与解决步骤
检查是否保存工作簿
openpyxl修改单元格后,必须调用工作簿的save()方法才能将变更写入文件。如果代码里遗漏了这一步,所有修改都只会停留在内存中,不会生效。
示例:# 在所有写入操作完成后执行保存 wb.save('你的输出文件路径.xlsx')验证行索引是否正确
你用25 + i计算行号,当record['week']为'02'时,i的值可能导致行号超出预期范围,或者和其他记录的写入位置重复/覆盖。建议在写入前打印行号确认:row_index = 25 + i print(f"实际写入行号:{row_index}") # 确认是否是你期望的行 cell = sheet.cell(row=row_index, column=4) cell.value = "some data"检查单元格是否被保护
如果目标工作表开启了保护,且目标单元格处于锁定状态,会导致无法写入。可以先解除保护:sheet.protection.disable() # 解除工作表保护优化单元格操作逻辑
你的代码里先获取了cell对象,又重复调用sheet.cell()赋值,虽然不影响功能,但可以优化为直接操作cell对象,让代码更清晰:cell = sheet.cell(row=row_index, column=4) cell.value = "some data"
修改后的完整示例代码
for i, record in enumerate(data_q_monday): if record['day'] == 'Monday' and record['month'] == 'January' and record['week'] in ['01', '02', '03', '04']: if record['week'] == '02': print(f"Week {record['week']} is valid to write to {sheet}.") row_index = 25 + i print(f"写入行号:{row_index}") cell = sheet.cell(row=row_index, column=4) cell.value = "some data" # 务必保存工作簿 wb.save('output.xlsx')
内容的提问来源于stack exchange,提问作者smokeflypaper
相关产品推荐
相关产品推荐

