python - 无法在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
解决方案
推荐阅读
- c# - 在 linq 中使用 Aggregate() 生成字符串时出现意外结果
- regex - 基于 s3 文件创建 s3 对象
- java - 通过 JDBC 将数据插入临时表时对象名称无效
- c++ - QVariant 包装的指针在 QML 中变为空
- c# - 绕过跨度类识别div类中的文本
- mysql - 我们可以在不同的数据库(免费数据库)上创建 sql DB 服务器备份吗?
- r - R:如何在我的列表中找到最大值的位置?
- angular6 - 如何以角度6将图像保存在本地存储中
- react-native - 在 NavigationOptions 中访问组件状态 - React Native
- java - 找不到类的序列化程序...(为避免异常,请禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)