设为首页 - 加入收藏  
您的当前位置:首页 >域名 >手把手教你4种方法用Python批量实现多Excel多Sheet合并 正文

手把手教你4种方法用Python批量实现多Excel多Sheet合并

来源:亿华互联编辑:域名时间:2025-11-05 15:56:11

一、手把手教实现前言

大家好,种方我是法用崔艳飞。前两天给大家分享了Python自动化文章:手把手教你利用Python轻松拆分Excel为多个CSV文件,批量而后在Python进阶交流群里边有读者遇到一个问题,多E多他有很多个Excel表格,合并他需要对这些Excel文件进行合并。手把手教实现

诚然,种方一个一个打开复制粘贴固然可行,法用但是批量该方法费时费力,还容易出错,多E多几个文件还可以手动处理,合并要是手把手教实现几十个甚至上百个,你就抓瞎了,种方不过这问题对Python来说,法用so easy,一起来看看吧!

二、项目目标

用Python实现多Excel、多Sheet的合并处理。

三、项目准备

软件:PyCharm

需要的库:pandas, xlrd,os

四、项目分析

1)如何选择要合并的Excel文件?

利用os,获取所有要合并的Excel文件。

2)如何选择要合并的Sheet?

利用xlrd库进行Excel读取,b2b供应网获取要合并的Sheet名。

3)如何合并?

利用pandas库,对所有Sheet名逐一循环打开,通过concat()进行数据追加合并即可。

4)如何保存文件?

利用to_excel保存数据,得到最终合并后的目标文件。

五、项目实现

1、第一步导入需要的库

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

# 获取第一个EXCEL名  xlsx_names1 = xlsx_names[0]  aa = path + xlsx_names1  #打开第一个EXCEL  first_file_fh=xlrd.open_workbook(aa)  # 获取SHEET名  first_file_sheet=first_file_fh.sheets() 

4、第四步对Sheet内容进行循环合并

#按SHEET名循环  for sheet_name in sheet_names:      df = None      # 按EXCEL名循环      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个,第%d个。" % (len(sheet_names),num))     num += 1 writer.save() writer.close() 

六、效果展示

1、处理前Excel数据:

2、运行进度提示:

3、合并后的结果:

七、总结

本文介绍了如何利用Python对多个Excel文件、多Sheet进行合并处理,减少了很多复制粘贴的麻烦,省时省力,还不容易出错,WordPress模板代码不多,循环追加有点绕,想想也就明白了,不懂的随时留言提问,大家一起学习进步。

有想法的小伙伴还可以将文章中的代码进行打包,做成一个exe可执行的小软件,包装好发给别人使用,也可以赚点小费噢,关于打包的教程这里不再赘述,欢迎前往:三个你必须要记住的Pyinstaller打包命令——利用Python实现打包exe。

八、彩蛋

下面两份代码是群内小伙伴提供了,小编也自行测试了下,亲测有效,欢迎大家积极尝试噢!

来自群友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(rC:\\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变量明确新表是否已经添加了表头,只要添加过一次就无须重复再添加 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个文件已经合并成功! % len(lst)) 

当然了,实现本文功能不仅仅限于上面提及的3种方式,高防服务器使用pandas也是可以做到的,如果你还有其他方法,欢迎交个朋友一起学习交流!

上一篇:微星Z77主板的性能与功能评测(打造卓越游戏体验与超频潜力一网打尽)
下一篇:VMware,虚拟系统之王,以前介绍过,见博文:诡异的虚拟机大师——VMware,VMware的强悍之处很多,其中之一就是可以轻松在虚拟和现实中穿梭,当然要实现这一愿望,就得安装VMware Tools了,呵呵,有些人可以不知道怎么安装呢,尤其LINUX下的安装,今天偶就把偶的安装过程和大家分享一下,呵呵,有不当之处,还请斧正 WIN系统操作系统一向追求易用为上,所以呀,安装VMware Tools也是一件非常轻松简单的事情,看截图吧(以最新推出的WIN2008测试版为例,其他像XP、VISTA都一样)  弹出对话框,确认是否安装,这不是废话嘛,当然要安装了  一会,VMware Tools的安装文件就被加载到系统的光驱中并自动运行安装程序了 WIN系统操作系统的一大毛病,需要重启,重启后状态栏显示为安装成功就一切OK了  和WIN2008时的虚拟机状态栏显示的一样 和WIN2008仍然是一样  也可以加载到光驱中,可不能自动安装了,这就是LINUX的一大缺点,易用性太差 UBUNTU自带的新立得安装管理器也不好使,看来只能手动命令行安装了  UBUNTU的命令行窗口就是“附件”里的“终端”,好奇怪的名字 13.jpg: 这是比关键的步骤啦,依次输入以下命令: --------------------------该行不输入 $sudo apt-get install build-essential --------------------------该行不输入 后面一路回答Y或回车就OK了 好了,安装到此结束,可以享受穿梭于真实与虚拟的快感了
最新文章

0.1757s , 11718.09375 kb

Copyright © 2025 Powered by 手把手教你4种方法用Python批量实现多Excel多Sheet合并,亿华互联  滇ICP备2023000592号-16

sitemap

Top