Добавить фрейм данных в Excel в определенной ячейке - PullRequest
0 голосов
/ 04 октября 2019

Я использую openpyxl для записи фрейма данных pandas в таблицу Excel. Я читаю книгу Excel из шаблона, так как клиенту нужен определенный заголовок, формат и т. Д.

Если я хочу добавить таблицу, начиная со строки 17, как мне изменить приведенный ниже код для достижения этой цели? ? Отформатированные, объединенные ячейки в строках с 1 по 16, поэтому, когда я пытаюсь сохранить в текущей форме, это дает мне AttributeError: 'MergedCell' object attribute 'value' is read-only. Я видел похожий вопрос о стеке, но респонденты посоветовали просто добавить несколько пустых ячеек перед добавлением фрейма данных - решение, которое не будет работать для меня.

import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows

wb = load_workbook('proto_temp.xlsx')
ws_rq = wb["Results Query"]

rows = dataframe_to_rows(df)

for r_idx, row in enumerate(rows, 1):
    for c_idx, value in enumerate(row, 1):
        ws_rq.cell(row=r_idx, column=c_idx, value=value)

wb.save("df_to_xl.xlsx")

1 Ответ

1 голос
/ 04 октября 2019

Вопрос: Есть ли данные после строка 17?

Если Ответить == НЕТ , см. Ниже

for r in dataframe_to_rows(df, index=True, header=True):
    ws.append(r)

Если Ответить == ДА, тогда ответ немного сложнее.


Опции

  • Структурируйте свой код так, чтобы вы выполняли код выше, до , другие ячейки написаны ниже.
  • Считайте XLSX в DF, внесите изменения и запишите его обратно.
  • Наконец, вы можете циклически проходить по диапазону и записывать ячейку за ячейкой (это кажется слишком дорогим в вычислительном отношении - но я решил, что в любом случае рекомендую это). sheet.cell(row=2, column=2).value = 2

Надеюсь, что это обеспечивает значение:)

...