You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Pandas+OpenPyXL写入Excel时部分工作表报'Merged Cell'对象属性'value'只读错误的排查求助

Pandas+OpenPyXL写入Excel时部分工作表报'Merged Cell'对象属性'value'只读错误的排查求助

问题背景

我现在在给老板写一个Python工具,功能是从一份Excel排班表里读取数据,然后把工时写入员工的考勤表(也是Excel文件)。老板要求必须保留考勤表里的原有函数和格式,所以我用Pandas来匹配日期,再用openpyxl引擎的ExcelWriter以追加覆盖的方式写入。

测试用随机生成的Excel文件时完全正常,但一用到真实的员工考勤表就触发错误:

'Merged Cell' object attribute 'value' is read only

这是我第一次写这类数据写入Excel的工具,肯定有不少疏漏,但只要解决这个问题就能赶上下周的截止日期了😭。

奇怪的现象细节

我做了很多测试,发现这个错误的触发非常有针对性:

  • 仅在部分工作表出现,同一个工作簿里的不同工作表表现不一致——比如"JAN 2026"工作表完全正常,但切换到"FEB 2026"就会立刻报错
  • 报错只发生在写入数据的步骤,读取数据的过程没有任何问题
  • 测试用的空白/简单结构Excel表从未出现过这个错误

我的代码片段

核心逻辑是:读取目标工作表(跳过前5行表头),遍历排班数据workData,匹配每行第一列的日期,找到后把对应工时写入第8列("Expected work hours"列,索引为7),最后覆盖原工作表:

import pandas as pd

# 读取目标工作表,跳过前5行表头
df = pd.read_excel(filePath, sheet_name=worksheetName, skiprows=5)

# 遍历排班数据,匹配日期并写入工时
for item in workData:
    for row in range(0, len(df)):
        excelDate = df.iat[row, 0]
        if excelDate == item["date"]:
            # 写入到第8列(索引7):Expected work hours
            df.iat[row, 7] = item["hours"]
            break

# 以追加覆盖模式写入原Excel文件
with pd.ExcelWriter(filePath, engine='openpyxl', mode='a', if_sheet_exists='overlay') as writer:
    df.to_excel(writer, sheet_name=worksheetName, index=False, header=False, startrow=6)

我已经尝试过的方案(均无效)

  • 检查了报错工作表的合并单元格,尝试手动取消部分合并后重新测试,仍然报错
  • 更换过openpyxl的版本(从3.0.9升到3.1.2),问题依旧
  • 尝试用df.loc代替df.iat来修改数据,还是触发同样的只读错误

求助问题

想请教各位大佬:

  • 为什么同一个工作簿里有的工作表正常,有的却触发合并单元格只读错误?
  • 我的代码逻辑哪里有问题?应该怎么修改才能避免这个错误?
  • 有没有办法在完全保留原有Excel函数、格式、合并单元格结构的前提下,安全地写入数据?

火山引擎 最新活动