如何使用openpyxl将字典数据插入现有Excel文件并解决MergedCell只读错误
openpyxl写入Excel报错
'MergedCell' object attribute 'value' is read-only解决方案 报错原因
openpyxl中的合并单元格仅保留范围最左上角的主单元格为可写入的普通单元格,其余被合并覆盖的单元格均为MergedCell类型,这类对象的value属性是只读的,直接给这类单元格赋值就会触发当前报错。你的代码从B11(第11行、第2列)开始的写入位置,刚好落在了工作表的非主合并单元格范围内,才会导致写入失败。
对应解决操作
- 先定位所有合并单元格的实际范围:把代码中注释掉的合并范围打印代码放开,确认写入位置和合并区域的重合情况:
运行后会输出类似print(cell_sheet.merged_cells.ranges)['B11:C12', 'E10:F10']的范围列表,就能直观看到你计划写入的位置是否被合并单元格覆盖。 - 调整写入起始位置:如果不需要改动原有合并格式,直接把写入起点移到合并区域外,或者移到对应合并区域的主单元格(即每个合并范围的最左上角单元格),即可正常写入值。
- 如需在原有合并区域写入内容,可先拆分目标位置的合并单元格,完成写入后再根据需要重新合并:
# 拆分指定范围的合并单元格,替换为实际目标范围即可 cell_sheet.unmerge_cells('B11:C12') # 执行原有写入逻辑 for k,v in elect_data.items(): cell_sheet.cell(row=start_row, column=start_column).value = k cell_sheet.cell(row=start_row, column=start_column+1).value = v['phone_no'] start_row += 1 # 写入完成后如有需要,可重新按原格式合并 # cell_sheet.merge_cells('B11:C12')
代码语法修正提示
现有代码中定义字典的行存在语法遗漏,缺少闭合的右大括号,会先触发语法运行错误,需要修正为:
data = {"Electricians" : {"Name of the electricians":{"phone_no": "7684930462"}}}
内容的提问来源于stack exchange,提问作者anand
相关产品推荐
相关产品推荐

