之前用vba程式寫的多個檔案合成一個檔案的程式,因為其執行速度慢、版本相容性問題,對工作產生了一定的影響,從而絕對徹底棄用它,採用Python指令碼來開發這個小工具讀取檔案用了csv模組中的reader,寫入到excel檔案採用了openpyxl模板,為什麼不用pandas模組的read_csv?主要是這個函式讀取過來的內容再合併在一起存在格式不同導致程式報錯,其的to_excel執行速度也一般,並不比openpyxl快。為了讓程式有通用性,透過檔案選擇對話方塊來選擇檔案,也對程式碼進行了函式封裝。具體的程式碼如下:import os import csv import openpyxl import tkinter as tk from tkinter import filedialog #透過csv把資料從csv檔案中讀出 def read_excel_xlsx(paths): data_total=list() data_indexs=list() total=0 for file_path in file_paths: with open(file_path,"r",encoding="utf-8") as csv_file: data=csv.reader(csv_file) for i,item in enumerate(data): if i>0: data_total.append(item) else: data_indexs.append(item) print("檔名 {0},記錄數 {1}".format(os.path.basename(file_path),i)) total+=i print("多個檔案總記錄數為:",total+1) data_index=data_indexs[0] return data_total,data_index # print(data_index) #透過openpyxl把資料寫入excel中 def write_excel_xlsx(path,sheet_name,title,data): workbook=openpyxl.Workbook() sheet=workbook.active sheet.title=sheet_name for i,index in enumerate(title): sheet.cell(1,i+1,index) for i,item in enumerate(data): for j,item2 in enumerate(item): sheet.cell(i+2,j+1,item2) workbook.save(path) print("資料合併完成") if __name__ == "__main__": # 開啟檔案對話方塊,獲取檔案完全路徑 root = tk.Tk() root.withdraw() file_paths = filedialog.askopenfilenames() data_total,data_index=read_excel_xlsx(file_paths) write_excel_xlsx("data/note_hb.xlsx","Sheet1",data_index,data_total)
之前用vba程式寫的多個檔案合成一個檔案的程式,因為其執行速度慢、版本相容性問題,對工作產生了一定的影響,從而絕對徹底棄用它,採用Python指令碼來開發這個小工具讀取檔案用了csv模組中的reader,寫入到excel檔案採用了openpyxl模板,為什麼不用pandas模組的read_csv?主要是這個函式讀取過來的內容再合併在一起存在格式不同導致程式報錯,其的to_excel執行速度也一般,並不比openpyxl快。為了讓程式有通用性,透過檔案選擇對話方塊來選擇檔案,也對程式碼進行了函式封裝。具體的程式碼如下:import os import csv import openpyxl import tkinter as tk from tkinter import filedialog #透過csv把資料從csv檔案中讀出 def read_excel_xlsx(paths): data_total=list() data_indexs=list() total=0 for file_path in file_paths: with open(file_path,"r",encoding="utf-8") as csv_file: data=csv.reader(csv_file) for i,item in enumerate(data): if i>0: data_total.append(item) else: data_indexs.append(item) print("檔名 {0},記錄數 {1}".format(os.path.basename(file_path),i)) total+=i print("多個檔案總記錄數為:",total+1) data_index=data_indexs[0] return data_total,data_index # print(data_index) #透過openpyxl把資料寫入excel中 def write_excel_xlsx(path,sheet_name,title,data): workbook=openpyxl.Workbook() sheet=workbook.active sheet.title=sheet_name for i,index in enumerate(title): sheet.cell(1,i+1,index) for i,item in enumerate(data): for j,item2 in enumerate(item): sheet.cell(i+2,j+1,item2) workbook.save(path) print("資料合併完成") if __name__ == "__main__": # 開啟檔案對話方塊,獲取檔案完全路徑 root = tk.Tk() root.withdraw() file_paths = filedialog.askopenfilenames() data_total,data_index=read_excel_xlsx(file_paths) write_excel_xlsx("data/note_hb.xlsx","Sheet1",data_index,data_total)