Copia el dataframe pandas para excel usando openpyxl

Tengo un formateo complicado guardado en un archivo de plantilla en el que necesito guardar datos de un dataframe de pandas. El problema es que cuando uso pd.to_excel para guardar en esta hoja de trabajo, los pandas sobrescriben el formato. ¿Hay alguna manera de “pegar valores” de alguna manera desde la hoja de cálculo? Estoy usando pandas 0.17

import openpyxl import pandas as pd wb= openpyxl.load_workbook('H:/template.xlsx') sheet = wb.get_sheet_by_name('spam') sheet.title = 'df data' wb.save('H:/df_out.xlsx') xlr = pd.ExcelWriter('df_out.xlsx') df.to_excel(xlr, 'df data') xlr.save() 

openpyxl 2.4 viene con una utilidad para convertir Pandas Dataframes en algo con lo que openpyxl puede trabajar directamente. El código se vería un poco así:

 from openpyxl.utils.dataframe import dataframe_to_rows rows = dataframe_to_rows(df) for r_idx, row in enumerate(rows, 1): for c_idx, value in enumerate(row, 1): ws.cell(row=r_idx, column=c_idx, value=value) 

Puede ajustar el inicio de la enumeración para colocar las celdas donde las necesite.

Consulte la documentación de openpyxl para más información.

Aquí está la solución para usted utilizando el clipboard :

 import openpyxl import pandas as pd import clipboard as clp #Copy dataframe to clipboard df.to_clipboard() #paste the clipboard to a valirable cells = clp.paste() #split text in varialble as rows and columns cells = [x.split() for x in cells.split('\n')] #Open the work book wb= openpyxl.load_workbook('H:/template.xlsx') #Get the Sheet sheet = wb.get_sheet_by_name('spam') sheet.title = 'df data' #Paste clipboard values to the sheet for i, r in zip(range(1,len(cells)), cells): for j, c in zip(range(1,len(r)), r): sheet.cell(row = i, column = j).value = c #Save the workbook wb.save('H:/df_out.xlsx')