вставлять кадры данных в существующий шаблон без удаления стиля - PullRequest
0 голосов
/ 28 января 2020

Я надеюсь, что у вас будет хороший день / ночь. Я пытаюсь вставить dataframe из pandas в load_workbook(template), который имеет color и img. Проблема в том, что я искал решение в течение нескольких дней и, наконец, нашел его.

Создайте копию шаблона и вставьте в него dataframe с win32com.

pythoncom.CoInitialize()

# Open excel to access to template
excel = win32.GetObject(None, 'Excel.Application')

# def workbook
wb = excel.Workbooks.Open(extract_filename)

# each sheet
first_sheet_info=wb.Worksheets("NOTES")
second_sheet_C1=wb.Worksheets("C1. Scheduled Maintenance Tasks")
third_sheet_C2= wb.Worksheets("C2. Findings&Corrective Actions")

# inserting datas into each sheet
first_sheet_info.Range(first_sheet_info.Cells(2,1),# Cell to start the "paste"
            first_sheet_info.Cells(1+len(df3.index)-1,
            1+len(df3.columns)-1)
        ).Value = df3.values

second_sheet_C1.Range(second_sheet_C1.Cells(4,1),# Cell to start the "paste"
            second_sheet_C1.Cells(4+len(df1.index)-1,
            1+len(df1.columns)-1)
        ).Value = df1.values

third_sheet_C2.Range(third_sheet_C2.Cells(4,1),# Cell to start the "paste"
        third_sheet_C2.Cells(4+len(df2.index)-1,
                1+len(df2.columns)-1)
        ).Value = df2.values

# excel close and save
wb.Close(SaveChanges=1)
excel.Quit()

Этот работает, но только для нескольких файлов, потому что есть специальный символ, который я не могу изменить в базе данных, и терминал возвращает мне ошибку из-за этого.

Итак Я попытался с помощью другого модуля, openpyxl, открыть шаблон и вставить данные с помощью модуля записи.

Это сработало, но оно удалило стиль шаблона. Поэтому я не могу его использовать.

dfs = {'NOTES':df3, 'C1. Scheduled Maintenance Tasks':df1, 'C2. Findings&Corrective Actions':df2}
writer = pd.ExcelWriter(extract_filename, engine='xlsxwriter')
book = load_workbook(template_file)
workbook = writer.book
for sheet_name in dfs.keys():
    if sheet_name =='NOTES':  
        dfs[sheet_name].to_excel(writer, sheet_name=sheet_name, index=False, startcol=0, startrow=1)
    else:
        dfs[sheet_name].to_excel(writer, sheet_name=sheet_name, index=False, startcol=0, startrow=4)

writer.save()

Если у вас, ребята, есть идеи, почему я не могу вставить специальный символ с модулем win32com и почему писатель не сохраняет стиль шаблона, ПОЖАЛУЙСТА, объясни мне.

...