同一文件夹下多工作簿按 sheet 名合并

适用场景:我有一个excel工作簿,里面有n个sheet,分别是应收款、应付款、其他应收款、其他应付款等等(该工作簿的每个sheet的表结构都不同,所以不能将文件夹下的所有工作簿汇到一个工作表)。将此表下发各单位(下级单位多,如200个)填写后收回。每个excel结构完全相同(利用excel保护,下级单位只能填报数据,不能修改表结构,连sheet名也不能修改)。最终需将收回的200个excel工作簿合并成1个excel工作簿,结构不变,仍然是应收、应付、其他应收、其他应付等等。
解决方法:利用强大的power query
1、创建一个自定义函数GetSheetsByFolder
内容:
(xPath)=>
let
sampleTable = Excel.Workbook(Folder.Files(xPath)[Content]{0},true),
sheetNameList = Table.SelectRows(sampleTable, each [Kind] = "Sheet")[Name],
binaryList = Folder.Files(xPath)[Content],
rs = List.Transform(sheetNameList,(x)=>Table.Combine(List.Transform(binaryList,each Excel.Workbook(_,true){[Name=x]}[Data])))
in
rs

    参数:存放工作簿的文件夹地址
    返回:一个List,每项为Table
    2、调用函数即可
    如:= GetSheetsByFolder("D:\所有"){3}
    3、有几个sheet就调用几次GetSheetsByFolder,最后“关闭并上载”,即可。
    tips:如果看不懂上面的代码,又想看懂的话,请移步下列网址学习
    https://pqfans.com/?s=excel.workbook
    若有问题欢迎交流