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

openpyxl写入异常:非'01'条件下无法向单元格写入数据

解决openpyxl写入单元格异常问题

问题分析

你遇到的情况是:当判断record['week'] == '02'时,代码能进入分支并打印日志,但数据无法写入单元格;仅'01'时正常。核心是写入操作执行了但未生效,大概率是以下几个原因导致。

排查与解决步骤

  1. 检查是否保存工作簿
    openpyxl修改单元格后,必须调用工作簿的save()方法才能将变更写入文件。如果代码里遗漏了这一步,所有修改都只会停留在内存中,不会生效。
    示例:

    # 在所有写入操作完成后执行保存
    wb.save('你的输出文件路径.xlsx')
    
  2. 验证行索引是否正确
    你用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"
    
  3. 检查单元格是否被保护
    如果目标工作表开启了保护,且目标单元格处于锁定状态,会导致无法写入。可以先解除保护:

    sheet.protection.disable()  # 解除工作表保护
    
  4. 优化单元格操作逻辑
    你的代码里先获取了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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:00:08