Python: перезапись существующего листа в файле Excel - PullRequest
0 голосов
/ 14 апреля 2020

Я использую следующий метод для перезаписи листа Excel, содержащего источник данных (оставляя все остальные листы с опорными точками, диаграммами и т. Д. c.):

from openpyxl import load_workbook

def excel_rewriter(data_source, df_name, target_file):
    book = load_workbook(data_source)
    writer = pd.ExcelWriter(data_source, engine='openpyxl')
    writer.book = book
    writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
    df_name.to_excel(writer, 'Data', index=False)
    writer.save()
    os.rename(data_source, target_file)

Исходный файл является источником данных, где я меняю таблицу данных своим DF (df_name) и изменяю имя файла на target_file.

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

Как можно изменить этот метод, чтобы он сначала удалял таблицу данных, прежде чем поставить на место мой DF?

Спасибо, заранее!

1 Ответ

0 голосов
/ 24 апреля 2020

Ну, все, что нужно было сделать, это добавить еще одну строку кода:

book.remove(book['Data'])

Таким образом, все выглядит так:

def excel_rewriter(data_source, df_name, target_file):
    book = load_workbook(data_source)
    book.remove(book['Data'])
    writer = pd.ExcelWriter(data_source, engine='openpyxl')
    writer.book = book
    writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
    df_name.to_excel(writer, 'Data', index=False)
    writer.save()
    os.rename(data_source, target_file)

Дело закрыто.

...