首页 > 解决方案 > 无法在python中使用openpyxl写入包含合并单元格的excel文件

问题描述

TLDR:在将数据框作为带有openpyxl.

我需要写一个预先存在的 Excel 表来填写表格。表单是预先格式化的,所以我使用openpyxl'sopen_workbook将其作为工作簿打开。然后使用 pandas 数据框完成表单填写。但是,Excel 工作表中的任何合并单元格都会阻止我对其进行写入。

我对此进行了谷歌搜索,但找不到任何人们试图写入包含合并单元格的工作表的情况。我发现xlsxwriter在写入文件时可以合并单元格,但我不确定如何检测先前合并的单元格的位置,也不知道如何将其与 openpyxl 集成。

这是我在写入 excel 工作表时用来保留格式的线程:如何在不覆盖数据的情况下写入现有的 excel 文件(使用熊猫)?

仅出于此线程中的演示目的,带有一对合并单元格的空 Excel 工作表就足够了。下面的代码将文件作为工作簿读取,然后将其作为数据帧读取,并尝试将其写回。

import pandas as pd
import openpyxl

df = pd.read_excel('example.xlsx')
wb = openpyxl.load_workbook('example.xlsx')

writer = pd.ExcelWriter('example2.xlsx', engine='openpyxl')
writer.book = wb
writer.sheets = dict((ws.title, ws) for ws in wb.worksheets)

df.to_excel(writer)

它抛出这个错误:

Traceback (most recent call last):
  File "/Users/nathan/Desktop/test.py", line 18, in <module>
    df.to_excel(writer)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pandas/core/generic.py", line 2127, in to_excel
    engine=engine)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pandas/io/formats/excel.py", line 662, in write
    freeze_panes=freeze_panes)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pandas/io/excel.py", line 1605, in write_cells
    xcell.value, fmt = self._value_with_fmt(cell.val)
AttributeError: 'MergedCell' object attribute 'value' is read-only

标签: pythonexcelpython-3.xpandasdataframe

解决方案


推荐阅读