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

697ec1bf352d7ec41357f44bf688ed22.png

一、前言

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

fd4f340b56d0a444388c9d1b74fcf08c.png

诚然,一个一个打开复制粘贴固然可行,但是该方法费时费力,还容易出错,几个文件还可以手动处理,要是几十个甚至上百个,你就抓瞎了,不过这问题对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数据:

e868418bc9aa4576f1a421d1557c001b.png

2、运行进度提示:

ee842913e64b721ae3df4c593bc3e3f1.png

3、合并后的结果:

7ae00eacbdf44d457c2041b8396f9552.png

七、总结

本文介绍了如何利用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jQuery布局插件UI Layout简介

UI Layout是一种基于jQuery的布局框架,项目主页http://layout.jquery-dev.net/。该框架的参考原型是ExtJS的border-layout,因此十分适用于将原有使用ExtJS的项目改造成jQuery项目。其核心是一个大小自适应的中心面板(必选)&#x…

淘到了一个不错的TF卡读卡器

最近换手机的时候一时冲动败了个32G的TF卡。买后又觉得手机存储空间还比较充裕,暂时用不上,便打算套个读卡器当U盘用。最开始我用的是以前买手机的时候送的一个读卡器,但其兼容性很差,在以前的那个8G的卡里还能勉强用用&#xff0…

Unity3D For Android 开发教程【转http://game.ceeger.com/Unity/Doc/2011/Unity3D_For_Android.html】...

Unity3D For Android 开发教程 Date:2011-08-01 04:33我自认为抵挡诱惑的能力还是很强大的,关键的时候还能把持住自己。今天逛了一下南京的丹凤街,终于受不住Android这美眉的诱惑。她虽脸蛋不怎么滴,但身材火热,且性感&#xff0c…

CentOS 6.4 编译安装 gcc-4.8.0

1.首先下载源代码 wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.0/gcc-4.8.0.tar.bz22.解压 tar -jxvf gcc-4.8.0.tar.bz23.下载编译所需的依赖项 cd gcc-4.8.0  ./contrib/download_prerequisites  cd ..4.建立编译输出目录 mkdir gcc-build-4.8.05.进入此目录,执…

Designer设计无代码工作流

1. 打开Designer,选择工作流,选择列表工作流,选择你要将此工作流应用的列表(这里我选择报销单)。 填写好工作流名称,点击确定。 现在我们开始正式设计工作流,首先我们拉一个记录历史到工作流中&…

机器学习算法总结--线性回归和逻辑回归

1. 线性回归 简述 在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合(自变量都…

C++知识总结(1)--变量和基本类型

最近打算看看《C primer》,重新复习C的一些知识点,同时会添加部分在做牛客网编程题目时候记录的知识点。 变量和基本类型 endl操纵符的效果是结束当前行,并将与设备关联的缓冲区中的内容刷到设备中。缓冲刷新操作可以保证到目前为止程序所产…

coroutine php_PHP 协程实现

多进程/线程最早的服务器端程序都是通过多进程、多线程来解决并发IO的问题。进程模型出现的最早,从Unix 系统诞生就开始有了进程的概念。最早的服务器端程序一般都是 Accept 一个客户端连接就创建一个进程,然后子进程进入循环同步阻塞地与客户端连接进行…

ORACLE PL/SQL编程之八: 把触发器说透

本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2.3 创建替代(INSTEAD OF)触发器 8.2.3 创建系统事件触发器 8.2.4 系统触发器事件属性 8.2.5 使用触发器谓词 8.…

机器学习算法总结--决策树

简介 定义:分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点和有向边组成。结点有两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类。 决策树学习通常包括3个步骤:特征选择、决策树的生…