Создание нового листа вместо использования существующего листа - PullRequest
0 голосов
/ 03 октября 2018

Я копирую данные из одной рабочей книги в другую.Проблема в том, что pandas создает новый лист с именем «имя_стали1» вместо использования «имя_стали».Я использую openpyxl в качестве движка Pandas.Можете ли вы помочь с причиной?

    input_file = "C:\Automations\FastenersAudit\ClassfiedExports\\" + str(export)
    output_file = "C:\Automations\FastenersAudit\Templates\\" + str(template)

    input_df = pd.read_excel(io=input_file, skiprows=1)
    output_df = pd.read_excel(io=output_file, skiprows=4)
    headings = list(output_df.head())
    writer = pd.ExcelWriter(output_file, engine="openpyxl")
    writer.book = openpyxl.load_workbook(output_file)

    for each_heading in headings:
        try:
            output_df[each_heading] = input_df[each_heading]
        except KeyError:
            continue

    output_df = output_df.loc[:, :'Total Attributes']
    output_df = output_df.drop(labels='Total Attributes', axis=1)
    output_df.to_excel(writer, sheet_name="Attribute Analysis", na_rep='', index=False, startrow=5, engine="openpyxl")
    writer.save()
    writer.close()

1 Ответ

0 голосов
/ 03 октября 2018

Слегка отредактированная версия: Большое спасибо за ваше решение.Он отлично работал с небольшой модификацией.

    writer.sheets = {ws.title: ws for ws in writer.book.worksheets}

    for sheetname in writer.sheets:
        if sheetname == 'Attribute Analysis':
            output_df.to_excel(writer, sheet_name=sheetname, na_rep='', index=False, startrow=5, engine="openpyxl", header=False)
    writer.save()

Оригинальный ответ:

Я думаю, вам понадобятся функции startrow и maxrow вместе с writer.sheets, чтобы прочитать имя листа:

writer.sheets = {ws.title: ws for ws in book.worksheets} 
for sheetname in writer.sheets:

output_df.to_excel(writer,sheet_name=sheetname,startrow=writer.sheets[sheetname].max_row, index = False,header= False)
writer.save()
...