Reputation: 4426
I have a template file Template.xlsx. It has 2 sheets: "Monthly Premium" and "Monthly Losses"
Then I am creating dataframe df. How can I simply save df into "Monthly Premium" sheet?
I thought something like this would work but it creates a new sheet name.
import pandas as pd
from openpyxl import load_workbook
#sample df
df = pd.DataFrame()
df["A"] = [1,2,3,4,5]
df["B"] = ["A", "B", "C", "D", "E"]
#print(df)
path = r'C:\My\Path\Template1.xlsx'
book = load_workbook(path)
writer = pd.ExcelWriter(path, engine='openpyxl')
writer.book = book
df.to_excel(writer, sheet_name='Monthly Premium')
writer.save()
writer.close()
Upvotes: 0
Views: 44
Reputation: 11342
To save a dataframe to an existing worksheet, you must set the worksheet collection in the excel writer.
Try this code:
###### create test file ######
from openpyxl import load_workbook, Workbook
wb = Workbook()
ws = wb.active
ws.title='Monthly Premium' # rename default sheet
ws = wb.create_sheet('Monthly Losses') # add sheet
wb.save(r'Template1.xlsx')
######### main script #########
import pandas as pd
from openpyxl import load_workbook
#sample df
df = pd.DataFrame()
df["A"] = [1,2,3,4,5]
df["B"] = ["A", "B", "C", "D", "E"]
#print(df)
path = r'Template1.xlsx'
book = load_workbook(path)
writer = pd.ExcelWriter(path, engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets) # prevent new sheet
df.to_excel(writer, sheet_name='Monthly Premium')
writer.save()
writer.close()
Output
Upvotes: 1