Search code examples
pythonexcelxlwings

Copy pasting multiple sheets into new workbook


The goal is to copy paste multiple existing sheets out of a workbook into a new workbook using xlwings. I have:

app = xw.App(visible=False)
book = xw.Book(path)

sheet_1 = book.sheets["Sheet1"]
sheet_2 = book.sheets["Sheet2"]

wb_res = xw.Book()
sheet_active = wb_res.sheets.active
sheet_1.api.Copy(Before=sheet_active)

This throws:

TypeError: Objects for SAFEARRAYS must be sequences (of sequences), or a buffer object.

Bonus question for the brave:
- How can I replace all formulas on a sheet for its value?

Thanks


Solution

  • If you can use win32com, you can try this:

    from win32com.client import Dispatch
    
    path1 = 'workbook1.xlsx'
    path2 = 'workbook2.xlsx'
    
    xl = Dispatch("Excel.Application")
    
    wb1 = xl.Workbooks.Open(Filename=path1)
    wb2 = xl.Workbooks.Open(Filename=path2)
    
    ws1 = wb1.Worksheets(1)
    ws1.Copy(Before=wb2.Worksheets(1))
    
    wb2.Close(SaveChanges=True)
    xl.Quit()