unable to write updated worksheet back to the same workbook-Python Excel Openpyxl

Viewed 120

Thank you for reading my post and I appreciate your help! I am trying to complete below steps using Python:

  1. copy 5 excel xlsx files from a folder as data source(all 5 files only have 1 sheet each)
  2. paste the above mentioned excel files in one workbook as 5 separate worksheet.
  3. Make updates on every sheet(for example, on sheet1 I need to sum a specific column etc.) and then write the modified sheets back to the same workbook.

Issue: when I write back to the original file it replaced the workbook in step2. I searched far and wide here and it says I need to change writer to openpyxl, however, when I change to openpyxl it has "zipfile.BadZipFile: File is not a zip file" error.

import openpyxl
import pandas as pd
import os
from openpyxl import Workbook
import xlsxwriter as xw
import openpyxl as xl
from openpyxl.utils import get_column_letter
import numpy as np


# step 1: copy sheets from data folder into master workbook
# opening the source excel file
df1 = pd.read_excel(r"file1path.xlsx")
df2 = pd.read_excel(r"file2path.xlsx")
df3 = pd.read_excel(r"file3path.xlsx")
df4 = pd.read_excel(r"file4path.xlsx")
df5 = pd.read_excel(r"file5path.xlsx")


dest_filename = r'masterfilepath.xlsx'

# opening the destination excel file
writer = pd.ExcelWriter(dest_filename, engine='xlsxwriter')

# Write to master workbook.
df1.to_excel(writer, sheet_name='W.5 Revenue',index= False)
df2.to_excel(writer, sheet_name='W.4 Rev details',index= False)
df3.to_excel(writer, sheet_name='W.7 Accrual',index= False)
df4.to_excel(writer, sheet_name='W.6 Adhoc',index= False)
df5.to_excel(writer, sheet_name='W.8 State',index= False)

# Close the Pandas Excel writer and output the Excel file.
writer.save()


# Filter rows account number beginning with 4 on file1(df1)

df1 = df1[df1["Ledger account"].str.startswith('4')]

writer = pd.ExcelWriter(dest_filename, engine='openpyxl')

if os.path.exists(dest_filename):
    book = openpyxl.load_workbook(dest_filename)
    writer.book = book

df1.to_excel(writer, sheet_name="W5")
writer.save()
writer.close()


0 Answers
Related