iT邦幫忙

1

excel 合併檔案(解決)

我現在手上有多個excel檔案
不同的檔案名稱
但是資料表格式是相同的
我現在想要把所有檔案
用相同的資料表格式彙整起來變成一個檔案
請問該如何處理


import xlrd
import xlsxwriter
source = ["D:/excel/"+str(i)+".xlsx" for i in range(22)]
target = "D:/excel/final.xlsx"
n = 13
data=[[] for i in range(n)]
count = 0
for i in source:
    wb = xlrd.open_workbook(i)
    for sheet in wb.sheets():
        for rownum in range(sheet.nrows):
            data[count].append(sheet.row_values(rownum))
        count = count + 1
        if count == n:
            count = 0
workbook = xlsxwriter.Workbook(target)
dataw = [workbook.add_worksheet() for i in range(n)]
font = workbook.add_format({"font_size":12})
for i in range(0,len(data)):
    for j in range(0,len(data[i])):
        for k in range(0,len(data[i][j])):
            dataw[i].write(j,k,data[i][j][k], font)
workbook.close()

我後來參照你的與網路的做法做出來了,相當感謝您

看更多先前的討論...收起先前的討論...
3CBrian iT邦新手 1 級 ‧ 2019-12-19 11:00:22 檢舉
就把工作表全部移放到同一個活頁簿就好了
ccutmis iT邦高手 8 級 ‧ 2019-12-19 11:16:31 檢舉
用Python處理蠻簡單的...
我會PYTHON但是沒處理過EXCEL,請問相關參考資料嗎?
ccutmis iT邦高手 8 級 ‧ 2019-12-19 11:35:33 檢舉
先問一下你要處理很多xls檔案那台電腦有安裝Microsoft Excel軟體嗎
有喔
ccutmis iT邦高手 8 級 ‧ 2019-12-19 11:39:26 檢舉
那太好了 我寫個範例等等貼上來給你參考
太感謝您了!
ccutmis iT邦高手 8 級 ‧ 2019-12-19 12:57:49 檢舉
範例貼上了 有附gif動畫demo 希望有幫助!

1 個回答

5
ccutmis
iT邦高手 8 級 ‧ 2019-12-19 12:57:18
最佳解答

GIF動畫demo:
http://www.web3d.url.tw/ITHELP/tmp/MergeXLS.gif

範例下載:
http://www.web3d.url.tw/ITHELP/tmp/MergeXLS.zip

源碼:

import os
#pip install pywin32 假如找不到模組報錯的話
from win32com.client import Dispatch

#要處理的xls檔案名稱
xls_array=['DEMO1.xls','DEMO2.xls','DEMO3.xls']

#要匯總的tsv檔案名稱
output_file='output.txt'

#目前資料夾的絕對路徑
base_dir = os.path.dirname(os.path.realpath(__file__))+"\\"
print(base_dir)

xl=Dispatch('Excel.Application')
with open(base_dir + output_file,"w") as f:
    f.writelines("姓名\t暱稱\t專長\t備註\n")
    for xlsName in xls_array:
        wb=xl.Workbooks.Open(base_dir+xlsName)
        ws=wb.Worksheets(1)
        info=ws.UsedRange
        rowsLen=info.Rows.count
        rows=info.Rows
        for j in range(1,rowsLen):
            column=str(rows[j]).replace("((","").replace("),)","").replace("None","''").replace("'","").split(", ")
            print(column)
            tmpStr=column[0]+"\t"+column[1]+"\t"+column[2]+"\t"+column[3]+"\n"
            f.writelines(tmpStr)
        wb.Close(True)
f.close()

註:
用pywin32模組呼叫excel的api來開啟excel檔,所以需要在客戶端安裝Microsofe Excel(要先確定它是可以正常開啟功能正常),如果上面的範例執行出現找不到模組請先確認你是否有正確安裝pywin32,且Python版本為3.x
也可以用pandas模組處理excel,不過那個學習曲線比較高。

我要發表回答

立即登入回答