跳到主要內容

Python自動化--複製Excel工作表至另一個Excel上

 Python可以協助處理大量重複性工作,將Excel上的工作表自動化複製至上百個不同的Excel檔案上

 

實務上可能會遇到必須將一個Excel工作表複製到不同的Excel檔案上的情況,一般而言利用Excel移動或複製工作表的功能也能處理,但是當這個動作必須執行上百次,移動到上百個不同的Excel檔案時,就必須耗時的一個一個執行重複性工作,然而利用Python就可以輕鬆簡單化這項工作。

 

不過Excel檔案因儲存的格式可分為xlsx(一般版本)xls(相容版本),這兩個版本在Python處理上需要使用不同的套件處理,這次就以相容版本為例進行示範,有興趣或是有需要的人可以再去搜尋

其他版本的處理。

 

操作範例:

假定手上有來自於不同地方的20個資料檔案,這些資料都適用一致的編碼方式,為了避免之後時間久了產生混亂,因此必須將這份編碼表分別插入這20份資料中,讓每份檔案都有一份編碼表可以參閱,編碼表如下所示。

這邊會用到3個套件,開始執行前,尚未安裝xlrdxlwtxlutils者需要先安裝,在Window環境下,開起命令提示字元,輸入pip install xlrd pip install xlwt以及pip install xlutils,安裝完成後,開始執行後續的程式碼。

import xlrd
import xlwt
from xlutils.copy import copy

def replace_xls(sheetname):
    table = xlsx.sheet_by_name(sheetname)
    rows = table.nrows
    cols = table.ncols
    worksheet = wb2_1.add_sheet(sheetname)
    for i in range(0,rows):
        for j in range(0, cols):
            # print(i,j,table.cell_value(i, j))
            worksheet.write(i, j ,table.cell_value(i, j))

    wb2_1.save(filename2)

xlsno=["01","02","03","04","05","06","07","08","09","10","11","12","13",
       "14","15","16","17","18","19","20"] 
xls_len = len(xlsno)
sheetnames=[u"編碼表"]
for j in name:
    flile_name = r'編碼整理.xls'
    xlsx = xlrd.open_workbook(flile_name)
    for i in range(xls_len):
        filename2=r'C:\\Users\\data\\data%s.xls'%(xlsno[i])
        wb2 = xlrd.open_workbook(filename2)
        wb2_1=copy(wb2)
        for sheetname in sheetnames:
            replace_xls(sheetname)           


這裡可以簡單拆解成2個部分,第一塊在def這段主要就是執行Excel工作表複製的程式。


但是因為需要執行的檔案有20個,因此後續呼叫執行def的程式必須用迴圈包裹起來,請程式批次執行,此為程式的第二部分。


執行完成後這20個檔案都會分別被插入一個名為"編碼表"的工作表,並存檔。

 

利用這樣的方式,可以快速完成工作表的複製,而不需要一個一個手動完成,對於工作上來說有2個好處,(1)節省時間,提升工作效率 (2)人工作業難免會有遺漏,例如:沒有複製到工作表,或是複製到錯誤的工作表等情況。有機會大家不妨試試看~


留言