TLDR: Я не могу записать фрейм данных на лист Excel, в котором уже есть объединенные ячейки, после чтения его как рабочей книги с openpyxl
.
Мне нужно записать всуществующий лист Excel для заполнения формы.Форма предварительно отформатирована, поэтому я использовал openpyxl
open_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