百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

代码分享:Python和VB代码实现批量合并EXCEL数据,拿走不谢

liuian 2025-02-08 11:50 53 浏览

在实际工作中,您经常需要处理各种Excel文件,例如合并很多个相同格式的Excel文件,或者同一个excel文件中很多个sheet,这种情况是不是常常令您头疼?

您是否想过让计算机帮您自动处理?说不定,您花两天做的事情,计算机十多分钟可能就完成了。

下面提供了三种合并数据的场景下的python代码和VB代码,可以复制粘贴直接使用~~


场景一

很多个相同格式的Excel文件,每个文件的表头都是一样的,存放在不同的文件夹下,如下图所示,

1、Python代码:

# !/usr/bin/python

# coding=utf-8

import os

import pandas as pd

import glob


FileNum = 0

dirList = []

exList = []


def CollectExcelCase1(path):

global FileNum

# 读取所在目录下的文件名称,返回列表

files = os.listdir(path)

# 循环处理列表中每个文件

for f in files:

# 判断是否文件夹

if(os.path.isdir(path + '/' + f)):

# 排除隐藏文件夹,因为隐藏文件夹过多

if(f[0] == '.'):

pass

else:

# 添加非隐藏文件夹

dirList.append(f)

# 循环处理每个子文件夹

for dl in dirList:

# 取出每个子文件夹中的excel文件,返回列表

fileList = glob.glob(os.path.join(dl, "*.xlsx"))

# 循环每个excel文件

for fl in fileList:

# 读取excel文件中的内容,并加入到列表中

exList.append(pd.read_excel(fl, index_col=None))

# 统计处理的文件数

FileNum = FileNum + 1


# 将exlist进行纵向合并转换为DataFrame类型

df=pd.concat(exList,axis=0)

# 将结果写入到文件CollecttoExcel.xlsx中

df.to_excel("CollecttoExcel.xlsx",encoding='gb2312')


if __name__=='__main__':

CollectExcelCase1("./")

print('一共合并了',FileNum,"个Excel文件")


2、VB代码:

单独创建一个文件夹,并新建一个Excel启用宏的工作簿,如下图所示,我们将文件夹1-5中的excel文件内容合并到结果文件夹中的CollecttoExcelVB.xlsm中

打开excel文件,在开发工具中,点击Visual Basic,打开VB编程页面,在左侧右击插入,选择模块,将以下代码拷贝至右侧的编辑区域,点击运行子过程/用户窗体,运行宏程序,确认没问题,点击保存即可。

每次打开excel文件,可以在开发工具中点击宏,然后运行宏程序。

也可以添加一个按钮,在开发工具-插入中点击按钮,然后在弹出的对话框中指定刚才的宏,点击确定,即完成添加按钮。以后每次打开这个文件时,只要点击这个按钮,即可自动执行宏,进行合并数据。

VB代码如下:

Option Explicit


Sub CollectToExcel()

Dim mypath, myfld, myfile, m, j, wb, arr()

Sheet1.UsedRange.Offset(1, 0).ClearContents '清除汇总表里面的内容

mypath = ThisWorkbook.Path & "\" '获取当前文件所在的路径

myfld = Left(ThisWorkbook.Path, InStrRev(ThisWorkbook.Path, "\") - 1) & "\" '获取当前文件所在路径的上一级路径

myfile = Dir(myfld, vbDirectory) '遍历上一级路径下的所有文件夹

'将所有文件夹路径存入数组arr中

Do While myfile <> "" '当返回值不为空时

If myfile <> "." And myfile <> ".." Then '当返回值不是"."(当前文件夹)或".."(上层文件夹)

If (GetAttr(myfld & myfile) And vbDirectory) = vbDirectory Then '如果得到的是文件夹

m = m + 1 '计算器

ReDim Preserve arr(m) '重定义数组arr

arr(m) = myfld & myfile & "\"

End If

End If

myfile = Dir '查找下一个文件夹

Loop '至此所有文件夹路径已放在数组arr中

'下面开始遍历每个文件夹中的excel文件

For j = 1 To m

myfile = Dir(arr(j) & "*.xlsx")

While myfile <> "" And myfile <> ThisWorkbook.Name '当每个文件夹中的EXCEL文件不为空,且不是当前的EXCEL文件时,执行下面操作

Set wb = CreateObject(arr(j) & myfile)

With wb.Sheets(1)

.UsedRange.Offset(1, 0).Copy Sheet1.Range("A" & Sheet1.[a1048576].End(xlUp).Row + 1) '将每个EXCEL文件的数据(第一行除外)拷贝至当前EXCEL文件

End With

wb.Close

myfile = Dir()

Wend

Next

Set wb = Nothing

'下面对当前的EXCEL文件进行格式统一

With Sheet1.Range("A1:Z65535").Font

.Name = "黑体"

.Size = 10

End With

End Sub


场景二

同一文件夹下,很多个相同格式的Excel文件,每个文件的表头都是一样的,如下图所示,

1、python代码实现:

#coding=utf-8

import os

import pandas as pd


excels = [

# 读取excel文件

pd.read_excel(fname)

# 循环读取默认路径下的excel文件,默认路径为与该程序文件相同的文件夹路径

for fname in os.listdir("./")

# 只读去excel文件

if ".xlsx" in fname

]

# 合并所有excel文件

df = pd.concat(excels)

# 将合并结果输出到CollecttoExcel.xlsx文件中

df.to_excel("CollecttoExcel.xlsx",index = False)


2、VB代码:

Option Explicit


Sub CollectToExcel()

Dim mypath, myfld, myfile, m, j, wb

Sheet1.UsedRange.Offset(1, 0).ClearContents '清除汇总表里面的内容

mypath = ThisWorkbook.Path & "\" '获取当前文件所在的路径

myfile = Dir(mypath & "\" & "*.xlsx") '从当前文件夹中获取所有要合并的表格

Do While myfile <> ""

'Set wb = Workbooks.Open(mypath & "\" & myfile) '打开遍历到的表格

While myfile <> "" And myfile <> ThisWorkbook.Name 'excel文件不为空,且不是当前的excel文件时,执行下面的操作

Set wb = CreateObject(mypath & myfile) '读取每个excel文件的内容

With wb.Sheets(1)

.UsedRange.Offset(1, 0).Copy Sheet1.Range("A" & Sheet1.[a1048576].End(xlUp).Row + 1) '将每个EXCEL文件的数据(第一行除外)拷贝至当前EXCEL文件

End With

wb.Close

myfile = Dir()

Wend

Loop

End Sub


场景三

同一个excel,有很多个相同格式的sheet文件,每个sheet的表头都是一样的,如下图所示,

1、Python代码:

#coding=utf-8

import os

import pandas as pd


# 读取excel文件内容,列表返回

files = pd.read_excel('./ExcelFile.xlsx',None)

# 获取excel文件中sheet的个数

sheets = list(files.keys())


fl = []

for i in sheets:

# 读取每个sheet的内容

sheet = files[i]

# 将读取的内容添加到结果中

fl.append(sheet)


# 将结果进行纵向合并转换为DataFrame类型

df = pd.concat(fl,axis=0)

# 将结果写入到文件CollecttoExcel.xlsx中

df.to_excel("CollecttoExcel.xlsx",index = False)


2、VB代码:

Option Explicit


Sub CollectToExcel()

Dim mypath, myfld, myfile, wb, j

Sheet1.UsedRange.Offset(1, 0).ClearContents '清除汇总表里面的内容

mypath = ThisWorkbook.Path & "\" '获取当前文件所在的路径

myfile = Dir(mypath & "\" & "*.xlsx") '从当前文件夹中获取所有要合并的表格

Do While myfile <> ""

Set wb = Workbooks.Open(mypath & "\" & myfile) '打开遍历到的表格

For j = 1 To wb.Sheets.Count '循环处理每个sheet

wb.Sheets(j).Range("a2", wb.Sheets(j).Cells.SpecialCells(xlCellTypeLastCell)).Copy '复制每个sheet的内容,从A2开始到已用区域最后一个单元格的范围全部复制

ThisWorkbook.Sheets(1).Cells(ThisWorkbook.Sheets(1).Range("A65536").End(xlUp).Row + 1, 1).PasteSpecial Paste:=xlValues '将复制的内容粘贴到当前表格中,从A列最后一个有数据的单元格后的空格开始粘贴

Next j

wb.Close (False) '复制粘贴完成后关闭被合并的表

myfile = Dir '继续遍历

Loop

End Sub


声明:??本文来自微信公众号“土拨鼠的菜园地”(ID:gh_30a852e13a3a),系原创文章,如需转载,请注明出处。

原文链接:
https://mp.weixin.qq.com/s/0WCsdzXzr381NFxOrK_p1Q

相关推荐

驱动网卡(怎么从新驱动网卡)
驱动网卡(怎么从新驱动网卡)

网卡一般是指为电脑主机提供有线无线网络功能的适配器。而网卡驱动指的就是电脑连接识别这些网卡型号的桥梁。网卡只有打上了网卡驱动才能正常使用。并不是说所有的网卡一插到电脑上面就能进行数据传输了,他都需要里面芯片组的驱动文件才能支持他进行数据传输...

2026-01-30 00:37 liuian

win10更新助手装系统(微软win10更新助手)

1、点击首页“系统升级”的按钮,给出弹框,告诉用户需要上传IMEI码才能使用升级服务。同时给出同意和取消按钮。华为手机助手2、点击同意,则进入到“系统升级”功能华为手机助手华为手机助手3、在检测界面,...

windows11专业版密钥最新(windows11专业版激活码永久)

 Windows11专业版的正版密钥,我们是对windows的激活所必备的工具。该密钥我们可以通过微软商城或者通过计算机的硬件供应商去购买获得。获得了windows11专业版的正版密钥后,我...

手机删过的软件恢复(手机删除过的软件怎么恢复)
手机删过的软件恢复(手机删除过的软件怎么恢复)

操作步骤:1、首先,我们需要先打开手机。然后在许多图标中找到带有[文件管理]文本的图标,然后单击“文件管理”进入页面。2、进入页面后,我们将在顶部看到一行文本:手机,最新信息,文档,视频,图片,音乐,收藏,最后是我们正在寻找的[更多],单击...

2026-01-29 23:55 liuian

一键ghost手动备份系统步骤(一键ghost 备份)

  步骤1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USDHDD模式选择好,然后按F10键保存,电脑就会马上重启。  步骤...

怎么创建局域网(怎么创建局域网打游戏)

  1、购买路由器一台。进入路由器把dhcp功能打开  2、购买一台交换机。从路由器lan端口拉出一条网线查到交换机的任意一个端口上。  3、两台以上电脑。从交换机任意端口拉出网线插到电脑上(电脑设置...

精灵驱动器官方下载(精灵驱动手机版下载)

是的。驱动精灵是一款集驱动管理和硬件检测于一体的、专业级的驱动管理和维护工具。驱动精灵为用户提供驱动备份、恢复、安装、删除、在线更新等实用功能。1、全新驱动精灵2012引擎,大幅提升硬件和驱动辨识能力...

一键还原系统步骤(一键还原系统有哪些)

1、首先需要下载安装一下Windows一键还原程序,在安装程序窗口中,点击“下一步”,弹出“用户许可协议”窗口,选择“我同意该许可协议的条款”,并点击“下一步”。  2、在弹出的“准备安装”窗口中,可...

电脑加速器哪个好(电脑加速器哪款好)

我认为pp加速器最好用,飞速土豆太懒,急速酷六根本不工作。pp加速器什么网页都加速,太任劳任怨了!以上是个人观点,具体性能请自己试。ps:我家电脑性能很好。迅游加速盒子是可以加速电脑的。因为有过之...

任何u盘都可以做启动盘吗(u盘必须做成启动盘才能装系统吗)

是的,需要注意,U盘的大小要在4G以上,最好是8G以上,因为启动盘里面需要装系统,内存小的话,不能用来安装系统。内存卡或者U盘或者移动硬盘都可以用来做启动盘安装系统。普通的U盘就可以,不过最好U盘...

u盘怎么恢复文件(u盘文件恢复的方法)

开360安全卫士,点击上面的“功能大全”。点击文件恢复然后点击“数据”下的“文件恢复”功能。选择驱动接着选择需要恢复的驱动,选择接入的U盘。点击开始扫描选好就点击中间的“开始扫描”,开始扫描U盘数据。...

系统虚拟内存太低怎么办(系统虚拟内存占用过高什么原因)

1.检查系统虚拟内存使用情况,如果发现有大量的空闲内存,可以尝试释放一些不必要的进程,以释放内存空间。2.如果系统虚拟内存使用率较高,可以尝试增加系统虚拟内存的大小,以便更多的应用程序可以使用更多...

剪贴板权限设置方法(剪贴板访问权限)
剪贴板权限设置方法(剪贴板访问权限)

1、首先打开iphone手机,触碰并按住单词或图像直到显示选择选项。2、其次,然后选取“拷贝”或“剪贴板”。3、勾选需要的“权限”,最后选择开启,即可完成苹果剪贴板权限设置。仅参考1.打开苹果手机设置按钮,点击【通用】。2.点击【键盘】,再...

2026-01-29 21:37 liuian

平板系统重装大师(平板重装win系统)

如果你的平板开不了机,但可以连接上电脑,那就能好办,楼主下载安装个平板刷机王到你的个人电脑上,然后连接你的平板,平板刷机王会自动识别你的平板,平板刷机王上有你平板的我刷机包,楼主点击下载一个,下载完成...

联想官网售后服务网点(联想官网售后服务热线)

联想3c服务中心是联想旗下的官方售后,是基于互联网O2O模式开发的全新服务平台。可以为终端用户提供多品牌手机、电脑以及其他3C类产品的维修、保养和保险服务。根据客户需求层次,联想服务针对个人及家庭客户...