您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“用Python批量實(shí)現(xiàn)多Excel多Sheet合并的方法有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
一、前言
誠然,一個(gè)一個(gè)打開復(fù)制粘貼固然可行,但是該方法費(fèi)時(shí)費(fèi)力,還容易出錯(cuò),幾個(gè)文件還可以手動(dòng)處理,要是幾十個(gè)甚至上百個(gè),你就抓瞎了,不過這問題對Python來說,so easy,一起來看看吧!
二、項(xiàng)目目標(biāo)
用Python實(shí)現(xiàn)多Excel、多Sheet的合并處理。
三、項(xiàng)目準(zhǔn)備
軟件:PyCharm
需要的庫:pandas, xlrd,os
四、項(xiàng)目分析
1)如何選擇要合并的Excel文件?
利用os,獲取所有要合并的Excel文件。
2)如何選擇要合并的Sheet?
利用xlrd庫進(jìn)行Excel讀取,獲取要合并的Sheet名。
3)如何合并?
利用pandas庫,對所有Sheet名逐一循環(huán)打開,通過concat()進(jìn)行數(shù)據(jù)追加合并即可。
4)如何保存文件?
利用to_excel保存數(shù)據(jù),得到最終合并后的目標(biāo)文件。
五、項(xiàng)目實(shí)現(xiàn)
1、第一步導(dǎo)入需要的庫
import pandas as pd import xlrd import os
2、第二步選擇要合并的Excel文件
#要合并文件路徑 path="D:/b/" #獲取文件夾下所有EXCEL名 xlsx_names = [x for x in os.listdir(path) if x.endswith(".xlsx")]
3、第三步選擇要合并的Sheet
# 獲取第一個(gè)EXCEL名 xlsx_names1 = xlsx_names[0] aa = path + xlsx_names1 #打開第一個(gè)EXCEL first_file_fh=xlrd.open_workbook(aa) # 獲取SHEET名 first_file_sheet=first_file_fh.sheets()
4、第四步對Sheet內(nèi)容進(jìn)行循環(huán)合并
#按SHEET名循環(huán) for sheet_name in sheet_names: df = None # 按EXCEL名循環(huán) for xlsx_name in xlsx_names: sheet_na = pd.ExcelFile(path + xlsx_name).sheet_names if sheet_name in sheet_na: #print(sheet_name) _df = pd.read_excel(path + xlsx_name, sheet_name=sheet_name,header=None) if df is None: df = _df else: df = pd.concat([df, _df], ignore_index=True) else:continue
5、第五步保存合并后的文件
df.to_excel(excel_writer=writer, sheet_name=sheet_name, encoding="utf-8", index=False) print(sheet_name + " 保存成功!共%d個(gè),第%d個(gè)。" % (len(sheet_names),num)) num += 1 writer.save() writer.close()
六、效果展示
1、處理前Excel數(shù)據(jù):
2、運(yùn)行進(jìn)度提示:
3、合并后的結(jié)果:
彩蛋
下面兩份代碼是群內(nèi)小伙伴提供了,小編也自行測試了下,親測有效,歡迎大家積極嘗試噢!
來自群友Jayson的代碼:
# -*- coding: utf-8 -*- # @Author: hebe # @Date: 2020-04-18 18:31:03 # @Last Modified by: hebe # @Last Modified time: 2020-04-18 19:40:48 import os import glob import openpyxl def merge_xlsx_files(xlsx_files): wb = openpyxl.load_workbook(xlsx_files[0]) ws = wb.active ws.title = "merged result" for filename in xlsx_files[1:]: workbook = openpyxl.load_workbook(filename) sheet = workbook.active for row in sheet.iter_rows(min_row=1): values = [cell.value for cell in row] ws.append(values) return wb #path is very important here , must true. def get_all_xlsx_files(path): xlsx_files = glob.glob(os.path.join(r'C:\\Users\\pdcfi\\Desktop\\', '*.xlsx')) sorted(xlsx_files, key=str.lower) return xlsx_files def main(): xlsx_files = get_all_xlsx_files(os.path.expanduser('~lmx')) wb = merge_xlsx_files(xlsx_files) wb.save('merged_form.xlsx') if __name__ == '__main__': main() print("all excel append OK!")
來自好友劉早起的代碼:
# -*- coding: utf-8 -*- from openpyxl import load_workbook, Workbook import glob path = "C:\\Users\\pdcfi\\Desktop\\excel\\" new_workbook = Workbook() new_sheet = new_workbook.active # 用flag變量明確新表是否已經(jīng)添加了表頭,只要添加過一次就無須重復(fù)再添加 flag = 0 for file in glob.glob(path + '/*.xlsx'): workbook = load_workbook(file) sheet = workbook.active coloum_A = sheet['A'] row_lst = [] for cell in coloum_A: if cell: print(cell.row) row_lst.append(cell.row) if not flag: header = sheet[1] header_lst = [] for cell in header: header_lst.append(cell.value) new_sheet.append(header_lst) flag = 1 for row in row_lst: data_lst = [] for cell in sheet[row]: data_lst.append(cell.value) new_sheet.append(data_lst) new_workbook.save(path + '/' + '符合篩選條件的新表.xlsx')
來自群友Engineer的代碼:
import tkinter as tk from tkinter import filedialog import os import pandas as pd import glob root = tk.Tk() root.withdraw() # 選擇文件夾位置 filelocation = os.path.normpath(filedialog.askdirectory(initialdir=os.getcwd())) lst = [] # 讀取文件夾下所有文件(xls和xlsx都讀取) for i in glob.glob(filelocation + "\\\\" + "*.*"): if os.path.splitext(i)[1] in [".xls", ".xlsx"]: lst.append(pd.read_excel(i)) # 保存合并后的excel文件 writer = pd.ExcelWriter(filedialog.asksaveasfilename(title="保存", initialdir=filelocation, defaultextension="xlsx", filetypes=[("Excel 工作簿", "*.xlsx"), ("Excel 97-2003 工作簿", "*.xls")])) pd.concat(lst).to_excel(writer, 'all', index=False) writer.save() print('\n%d個(gè)文件已經(jīng)合并成功!' % len(lst))
“用Python批量實(shí)現(xiàn)多Excel多Sheet合并的方法有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。