Я надеюсь, что у вас будет хороший день / ночь. Я пытаюсь вставить 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
и почему писатель не сохраняет стиль шаблона, ПОЖАЛУЙСТА, объясни мне.