简体   繁体   中英

Python - Copy sheet from multiple workbooks to one workbook

Here is my process:

Step 1: Open File1
Step 2: Load Sheet1
Step 3: Load OutputFile
Step 4: Create a new sheet in OutputFile
Step 5: Copy contents cell by cell from Step 2 to paste in the sheet created in Step 4
Step 6: Repeat the process 'n' number of times

I have created a Python script to achieve this but the program is insanely slow. Takes an hour to complete. Here is a snippet of the code that does the copying over.

import xlsxwriter as xlsx
import openpyxl as xl

for i in range (6,k):
    #get the file location/name from source file
    filename = sheet.cell_value(i,3)
    #get the sheetname from the sheet read in the above statement
    sheetname = sheet.cell_value(i,4)
    #print the file name to verify
    print(filename)
    #get output sheet name
    outputsheetname = sheet.cell_value(i,5)

    #load the source workbook
    wb1 = xl.load_workbook(filename=filename,data_only = True)
    #get the index of sheet to be copied
    wb1_sheet_index = wb1.sheetnames.index(sheetname)
    #load the sheet
    ws1 = wb1.worksheets[wb1_sheet_index]

    #load the output workbook
    wb2 = xl.load_workbook(filename=output_loc)
    #create a new sheet in output workbook
    ws2 = wb2.create_sheet(outputsheetname)
    #print(ws2,":",outputsheetname)

    for row in ws1:
        for cell in row:
            ws2[cell.coordinate].value = cell.value

    wb2.save(output_loc)

wb2.save(output_loc)

The filename, sheetname and outputsheetname comes from a master excel sheet where I keep the file location and sheet names. I load this file before this loop.

Also, I want the contents of the cell to be copied. If the source sheet has any formula, I do not want that to be copied over. And if there is a value 500 in Cell A5, I want the value to be in cell A5 in the output sheet.

Maybe I am approaching this the wrong way. Any help is appreciated.

openpyxl is the slowest module to work with excel file. you can try doing it with xlwings or if you're okay to use any excel add-in here is the RDB Merge that you can prefer using it, it is comparetively fast and does work

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM