一、前言

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

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

二、项目目标

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

三、项目准备

软件:PyCharm

需要的库:pandas, xlrd,os

四、项目分析

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

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

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

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

3)如何合并?

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

4)如何保存文件?

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

五、项目实现

1、第一步导入需要的库

import pandasaspd

import xlrd

import os

2、第二步选择要合并的Excel文件

#要合并文件路径

path="D:/b/"

#获取文件夹下所有EXCEL名

xlsx_names = [x forxinos.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名循环

forsheet_nameinsheet_names:

df = None

# 按EXCEL名循环

forxlsx_nameinxlsx_names:

sheet_na = pd.ExcelFile(path + xlsx_name).sheet_names

if sheet_name insheet_na:

#print(sheet_name)

_df = pd.read_excel(path + xlsx_name, sheet_name=sheet_name,header=None)

if df isNone:

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进行合并处理,减少了很多复制粘贴的麻烦,省时省力,还不容易出错,代码不多,循环追加有点绕,想想也就明白了,不懂的随时留言提问,大家一起学习进步。

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

八、彩蛋

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

来自群友Jayson的代码:

# -*- coding: utf-8 -*-

# @Author: hebe

# @Date:   2020-04-18 18:31:03

# @LastModifiedby:   hebe

# @LastModifiedtime: 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"

forfilenameinxlsx_files[1:]:

workbook = openpyxl.load_workbook(filename)

sheet = workbook.active

forrowinsheet.iter_rows(min_row=1):

values= [cell.valueforcellinrow]

ws.append(values)

returnwb

#path isvery important here , musttrue.

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)

returnxlsx_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 -*-

fromopenpyxl import load_workbook, Workbook

import glob

path = "C:\\Users\\pdcfi\\Desktop\\excel\\"

new_workbook = Workbook()

new_sheet = new_workbook.active

# 用flag变量明确新表是否已经添加了表头,只要添加过一次就无须重复再添加

flag = 0

forfileinglob.glob(path +'/*.xlsx'):

workbook = load_workbook(file)

sheet = workbook.active

coloum_A = sheet['A']

row_lst = []

forcellincoloum_A:

if cell:

print(cell.row)

row_lst.append(cell.row)

if notflag:

header = sheet[1]

header_lst = []

forcellinheader:

header_lst.append(cell.value)

new_sheet.append(header_lst)

flag = 1

forrowinrow_lst:

data_lst = []

forcellinsheet[row]:

data_lst.append(cell.value)

new_sheet.append(data_lst)

new_workbook.save(path + '/'+'符合筛选条件的新表.xlsx')

来自群友Engineer的代码:

import tkinterastk

fromtkinter import filedialog

import os

import pandas aspd

import glob

root = tk.Tk()

root.withdraw()

# 选择文件夹位置

filelocation = os.path.normpath(filedialog.askdirectory(initialdir=os.getcwd()))

lst = []

# 读取文件夹下所有文件(xls和xlsx都读取)

foriinglob.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也是可以做到的,如果你还有其他方法,欢迎交个朋友一起学习交流!

【编辑推荐】

【责任编辑:姜华 TEL:(010)68476606】

点赞 0

python 合并excel 自动更新_手把手教你4种方法用Python批量实现多Excel多Sheet合并相关推荐

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

    一个一个打开复制粘贴固然可行,但是该方法费时费力,还容易出错,几个文件还可以手动处理,要是几十个甚至上百个,你就抓瞎了,不过这问题对Python来说,so easy,一起来看看吧! 二.项目目标 用P ...

  2. python英文词云代码_手把手教你制作 中英文 词云 | python demo

     以前做词云的时候网上看的python做词云的坑都很多,耗了很多时间才高清楚wordcloud制作词云的精髓和脉络,整理如下. 相关文章 准备Mac环境下直接pip install wordclou ...

  3. Python的pip怎样更新到最新版本:两种方法!

    Python的pip怎样更新到最新版本:两种方法! 方法一: 在管理员模式的控制台里输入下面这行命令 python -m pip install --upgrade pip 方法二: Anaconda ...

  4. python numpy安装教程_手把手教你搭建机器学习开发环境—Python与NumPy的超简安装教程...

    手把手教你搭建机器学习开发环境Python语言是机器学习的基础,所以,想要入门机器学习,配置好Python的开发环境是第一步.本文就手把手的教你配置好基于Python的机器学习开发环境.超简单!第一步 ...

  5. python爬取资料怎么样_手把手教你Python爬取新房数据

    原标题:手把手教你Python爬取新房数据 项目背景 新房数据,对于房地产置业者来说是买房的重要参考依据,对于房地产开发商来说,也是分析竞争对手项目的绝佳途径,对于房地产代理来说,是踩盘前的重要准备. ...

  6. python爬虫爬取房源_手把手教你用Python网络爬虫爬取新房数据

    项目背景 大家好,我是J哥. 新房数据,对于房地产置业者来说是买房的重要参考依据,对于房地产开发商来说,也是分析竞争对手项目的绝佳途径,对于房地产代理来说,是踩盘前的重要准备. 今天J哥以「惠民之家」 ...

  7. 如何用python抓取qq音乐_手把手教你使用Python抓取QQ音乐数据(第三弹)-阿里云开发者社区...

    [一.项目目标] 通过手把手教你使用Python抓取QQ音乐数据(第一弹)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 通过手把手教你使用Python抓取QQ音乐 ...

  8. python 时间序列prophet 模型分析_手把手教你用Prophet快速进行时间序列预测(附Prophet和R代码)...

    原标题:手把手教你用Prophet快速进行时间序列预测(附Prophet和R代码) 作者:ANKIT CHOUDHARY:翻译:王雨桐:校对:丁楠雅: 本文约3000字,建议阅读12分钟. 本文将通过 ...

  9. python网页爬虫循环获取_手把手教你用 Python 搞定网页爬虫

    原标题:手把手教你用 Python 搞定网页爬虫 编译:欧剃 作为数据科学家的第一个任务,就是做网页爬取.那时候,我对使用代码从网站上获取数据这项技术完全一无所知,它偏偏又是最有逻辑性并且最容易获得的 ...

最新文章

  1. Android 设计模式 - 观察者模式
  2. mybatis配置时出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)...
  3. Windows server 2003下Oracle10g安装图解
  4. table的分页打印
  5. 3ds Max 2018 在安装后无法启动或出现不稳定
  6. linux-basic(12)正则表达式与文件格式化处理
  7. BDD怎样帮助你解决沟通问题并增进协作
  8. delstr函数python_python3全栈开发-内置函数补充,反射,元类,__str__,__del__,exec,type,__call__方法详解...
  9. Lucene.net试用
  10. oracle数据库greatest函数,ORACLE函数之GREATEST函数详解范例
  11. 圆锥曲线解答题实用结论
  12. Excel将两个图片合并为一张
  13. Python数据分析-绘图-2-Seaborn进阶绘图-7-网格图
  14. Python爬虫系列-------Scrapy框架爬取校花网校花图片
  15. 论文阅读-OneRel: Joint Entity and Relation Extraction with One Module in One Step- CCF A- AAAI 2022
  16. 基于YOLOv7的室内场景智能识别系统(源码&教程)
  17. unity编写一个简单的小游戏
  18. 【磁盘调度算法】磁盘调度模拟的设计与分析
  19. ctr多少正常_亚马逊点击率多少算正常?点击率怎么算?
  20. 前端导出Excel(自定义样式、多级表头、普通导出)

热门文章

  1. android模拟器插件,Android模拟器插件找不到android SDK
  2. html字符串转换jsx,javascript – 将React.element转换为JSX字符串
  3. 输入框限制只能输入数字,正数、负数、0,最多两位小数;数字输入框可以输入负数,并最多保留两位小数;el-number-input去掉四舍五入和自动补齐小数;
  4. 记录uni-app弹框事件无生命周期问题;uni-popup-dialog打开触发事件;uni-popup-dialog调用接口时机
  5. ant design vue中通知提醒框Notification的使用
  6. [react] 除了实例的属性可以获取Context外哪些地方还能直接获取Context呢?
  7. Taro+react开发(89):封装为一个函数渲染
  8. 前端学习(3280):iterator
  9. 前端学习(2951):上午回顾
  10. 前端学习(2876):原生js模块化+弹幕的宽度和高度