Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t使用python中的openpyxl写入包含合并单元格的excel文件_Python_Excel_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Can';t使用python中的openpyxl写入包含合并单元格的excel文件

Can';t使用python中的openpyxl写入包含合并单元格的excel文件,python,excel,python-3.x,pandas,dataframe,Python,Excel,Python 3.x,Pandas,Dataframe,TLDR:在使用openpyxl将数据框作为工作簿读取后,我无法将其写入包含先前存在的合并单元格的excel工作表 我需要写一张事先存在的excel表格来填写表格。表单是预格式化的,所以我使用了openpyxl的open\u工作簿将其作为工作簿打开。然后使用数据帧完成表单填充。但是,excel工作表中的任何合并单元格都会阻止我对其进行写入 我在谷歌上搜索过这个问题,但找不到有人试图在包含合并单元格的工作表上写字的案例。我发现xlsxwriter可以在写入文件时合并单元格,但我不知道如何检测以前合

TLDR:在使用
openpyxl
将数据框作为工作簿读取后,我无法将其写入包含先前存在的合并单元格的excel工作表

我需要写一张事先存在的excel表格来填写表格。表单是预格式化的,所以我使用了
openpyxl
open\u工作簿
将其作为工作簿打开。然后使用数据帧完成表单填充。但是,excel工作表中的任何合并单元格都会阻止我对其进行写入

我在谷歌上搜索过这个问题,但找不到有人试图在包含合并单元格的工作表上写字的案例。我发现
xlsxwriter
可以在写入文件时合并单元格,但我不知道如何检测以前合并的单元格所在的位置,也不知道如何将其与openpyxl集成

这是我在编写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
回溯(最近一次呼叫最后一次):
文件“/Users/nathan/Desktop/test.py”,第18行,在
df.to_excel(编写器)
excel中的文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site packages/pandas/core/generic.py”,第2127行
发动机=发动机)
文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site packages/pandas/io/formats/excel.py”,第662行,以书面形式
冻结窗格=冻结窗格)
文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site packages/pandas/io/excel.py”,第1605行,在write_单元格中
xcell.value,fmt=self.\u value\u与\u fmt(cell.val)
AttributeError:'MergedCell'对象属性'value'为只读