分享

200个文件6秒,Excel文件汇总方法大全(含Python),源码全部分享!

 Excel办公实战 2021-06-29

再过两个月就要到年终了,转眼一年过去了!在假期来临之前,想必大家又要开始各种汇总数据了,所以我们出一期Excel多文件汇总方法大全!希望能帮助到大家!源码全部分享!


代码都是刚写的,热乎……,让我们来一起看看吧!

测试数据为:200个excel文件,每个100行数据


首先我们先说点大家喜欢凑热闹的Python吧!小编刚刚撸的代码,我们直接来看!


Python-Pandas方法


本文由“壹伴编辑器”提供技术支持


200个文件 用时 6s左右 ,Pandas不愧是最受欢迎的数据分析工具!一半的时间用在输出上,合并用时基本3s左右!大家可以自行测试!

Python源码:通用-标准一维表

'''
作者:E精精
公众号:作者:Excel办公实战
日期:20201111
功能:Excel多文件汇总
'''


import pandas as pd
import os
import time
# 开始时间
start =time.clock()
# 文件所在目录
base_path = r'D:\360MoveData\Users\10712\Desktop\Data'
# 用于存放文件的list
df_list = []
# 遍历文件
for excelfile in os.listdir(base_path):
    # 读取到dataframe
    df_excel = pd.read_excel(os.path.join(base_path,excelfile))
    # 存放到list
    df_list.append(df_excel)

# 合并到一起
pd_res = pd.concat(df_list)

# 结果行数
print(len(pd_res))

# 保存到excel
pd_res.to_excel('res.xlsx',index=False)
end = time.clock()
print("总耗时:{:.2f}s".format(end-start))


我们毕竟都是办公小白,对于大部分人而言,对Python仅仅是听说很厉害,但是真正使用多的还是Excel本身,所以我们还是回来吧,看看Excel怎么玩……



VBA方法


直接看一下结果图:执行有点时间,动画演示效果就不放了!


VBA源码通用-适合标准的一维表结构汇总!

'公众号:Excel办公实战
'
作者:E精精
'功能:多文件合并
'
==============================================================

Sub 多文件合并()
    Dim sPath As String '接收要合并的文件夹路径
    
    '
-----------选择要合并的文件件-----------------
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "请选择要合并的文件夹"
        .InitialFileName = ThisWorkbook.Path
        .AllowMultiSelect = False
        If .Show Then
            sPath = .SelectedItems(1)
        End If
    End With
    
    '-----------遍历合并--------------------------------
    Dim wb As Workbook, ws As Worksheet
    Dim fileCount As Integer, maxRow As Integer
    Dim iRow As Integer, iCol As Integer
    Dim sFile As String
    
    Set ws = ThisWorkbook.Sheets(1)
    Dim sht As Worksheet
    
    '
清空历史内容,防重复
    ws.Cells.ClearContents
    Application.ScreenUpdating = False
    If sPath <> "" Then
        sPath = sPath & "\"
        sFile = Dir(sPath & "
*.xls?")
        Do While Len(sFile) > 0
            fileCount = fileCount + 1
            Set wb = Workbooks.Open(sPath & sFile)
            Set sht = wb.Sheets(1)
            '数据的行列数
            With sht.Range("
a1").CurrentRegion
                iRow = .Rows.Count
                iCol = .Columns.Count
            End With
            
            If ws.Range("
a1") = "" Then '第一次粘贴
                ws.Range("
a1").Resize(iRow, iCol).Value = _
                sht.Range("
a1").CurrentRegion.Value
            Else
                maxRow = ws.Cells(Rows.Count, 1).End(3).Row + 1
                ws.Cells(maxRow, 1).Resize(iRow - 1, iCol).Value = _
                sht.Range("
a2").Resize(iRow - 1, iCol).Value
            End If
            wb.Close 0
            sFile = Dir
        Loop
    End If
    Application.ScreenUpdating = True
    MsgBox "
合并完成,共合并" & fileCount & "个文件", vbOKOnly, "提示"
End Sub


说完VBA,我们最后再来说一下,Power Query如何实现汇总,我知道很多新手朋友都是一步一步操作,这里我们就直接使用M函数来写,所谓的函数式编程:


Power Query


本文由“壹伴编辑器”提供技术支持

动画演示:已经写好的M函数合并模板!


M函数源码(左右滑动查看):适合标准一维表结构

let
    // 存放文件的路径
    base_path = "D:\360MoveData\Users\10712\Desktop\Data",
    file_list = Folder.Files(base_path),
    // 提取首个工作表
    trans_excel = List.Transform(file_list[Content],each Excel.Workbook(_,true){0}[Data]),
    // 合并
    combine_file = Table.Combine(trans_excel)

in
    combine_file


其实还有ADO和SQL的方法,只是文件太多,在Excel中使用SQL的体验并不是很好,所以我们本次不谈!

详细的视频教程,录制中……

本文由“壹伴编辑器”提供技术支持

打开,Ctrl+C、Ctrl+V、关闭……这样的事情,很多小白就这样满头苦干的,有的年底设置,搞了几天的都有…… 但是有的人只要几秒!工欲善其事必先利其器,同学,请工作八小时后,抽点时间学习吧!做一个“懒人”他不香吗?

让我们一起来做一个“懒人”吧!

本文由

“壹伴编辑器”提供技术支持



    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多