我現在手上有多個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()
我後來參照你的與網路的做法做出來了,相當感謝您
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,不過那個學習曲線比較高。