场景描述:接上一篇文章,我用Python把数据导出来后,需要把多个Excel的数据合并到一个表里面;

前提条件:1.每个工作簿的列标题及列数要一致;

     2.每个工作簿的页签名称要一致;

     3.保证该路径下只存在Excel文件;

     若不满足以上条件,可能会数据混乱;

实现逻辑:用vba自动访问该路径下的工作簿;然后把里面指定的数据拿出来放到当前活动的工作簿内,然后关闭已打开的工作簿;

'合并多个Excel表数据
Sub MergeExcel()
    Dim WbookPath, WbookName, AWbookName
    Dim Wb As Workbook, WbN As String
    Dim i As Long
    Dim Num As Long
    Dim BOX As String
    Application.ScreenUpdating = False'关闭屏幕刷新
    WbookPath = ActiveWorkbook.Path'获取当前打开的工作簿的路径
    WbookName = Dir(WbookPath & "\" & "*.xls")'获取后缀为.xls的文件,默认为该路径第一个文件
    AWbookName = ActiveWorkbook.Name'获取活动工作簿的名称
    Num = 0
    'MsgBox "WbookPath:" & WbookPath
    'MsgBox "WbookName:" & WbookName
    'MsgBox "AWbookName:" & AWbookName
    Do While WbookName <> "" '如果获取到的文件名称不为空,进入循环
        If WbookName <> AWbookName Then    'if判断名称是否为当前活动工作簿,为true则继续执行if内代码块
            If WbookName = "辅助核算对照信息1.xls" Then'如果工作簿名称是这个,就保留表头信息,否则不保留表头
                Set Wb = Workbooks.Open(WbookPath & "\" & WbookName)'打开该路径下的文件
                Num = Num + 1
                With Workbooks(1).ActiveSheet
                .Cells(.Range("B165536").End(xlUp).Row + 2, 1) = Left(WbookName, Len(WbookName) - 4)'在当前工作薄中B列最后有数据的单元格后2格加上合并文件名不包含扩展名
                For i = 1 To Sheets.Count
                    Wb.Sheets(i).UsedRange.Copy .Cells(.Range("B165536").End(xlUp).Row, 1)'把当前工作簿路径下的xls文件中的Sheets(i)页签下的数据复制到当前工作薄中的B列最后有数据的单元格,列为第一列(即A列)
                Next
                WbN = WbN & Chr(13) & Wb.Name
                Wb.Close False
                End With
            Else
                Set Wb = Workbooks.Open(WbookPath & "\" & WbookName)
                Num = Num + 1
                With Workbooks(1).ActiveSheet
                .Cells(.Range("B165536").End(xlUp).Row + 2, 1) = Left(WbookName, Len(WbookName) - 4)
                For i = 1 To Sheets.Count
                    Wb.Sheets(i).UsedRange.Offset(3).Copy .Cells(.Range("B165536").End(xlUp).Row + 1, 1)'.Offset(3),不复制前三行
                Next
                WbN = WbN & Chr(13) & Wb.Name
                Wb.Close False
                End With
            End if
        End If
        WbookName = Dir'查找下一个文件,如果下一个文件不是xls会报错
    Loop
    Range("B1").Select
    Application.ScreenUpdating = True
    MsgBox "已合并" & Num & "个工作薄,列表如下:" & Chr(13) & WbN, vbInformation
End Sub

 

具体操作方法:

1.如下图,前面四个文件是需要合并的表,最后一个是合并后存放数据的表;

java poi多个Workbook合并 java合并多个excel_数据

 

 

2.我们打开汇总表,在第一个页签上右键点击查看代码;

java poi多个Workbook合并 java合并多个excel_文件名_02

 

 

3.然后把上面的代码复制进去(需要根据自己需要修改代码内的数据),需要修改的地方都有注释是什么意思什么作用的,最后点击运行,即可完成汇总;

汇总之后记得保存数据,如果提示不能保存带有宏的文件,就选择另存为即可;

java poi多个Workbook合并 java合并多个excel_数据_03

 

java poi多个Workbook合并 java合并多个excel_数据_04