Power Query实现:单文件合并两表后批量处理文件夹内所有文件
批量处理文件夹内Excel文件:先合并单文件两表再汇总
嘿,这个需求其实挺典型的——核心就是把单文件内的两表合并逻辑封装成自定义函数,再让Power Query用这个函数批量遍历文件夹里的所有文件。下面是具体的操作步骤,跟着来就行:
步骤1:创建“单文件两表合并”的自定义函数
- 先导入一个示例Excel文件到Power Query,完成你已经会的两表合并操作(比如按关键字段做内连接/左连接,选择需要的字段)。
- 合并完成后,点击Power Query编辑器顶部的高级编辑器,把现有代码改写成函数:
- 开头加一行定义函数的代码:
(Filepath as text) as table => - 把代码里原本固定的文件路径(比如
"C:\测试文件.xlsx")替换成参数Filepath - 确保代码最后返回的是合并后的表(通常是最后一步的变量名)
- 举个简化版的函数示例:
(Filepath as text) as table => let // 导入Excel文件的所有表 Source = Excel.Workbook(File.Contents(Filepath), null, true), // 获取第一张表(如果表名固定,也可以用表名,比如Source{[Name="表1"]}[Data]) 表1 = Source{0}[Data], // 获取第二张表 表2 = Source{1}[Data], // 合并两张表(这里按"ID"字段做左连接,可根据你的需求调整) 合并表 = Table.NestedJoin(表1, {"ID"}, 表2, {"ID"}, "表2", JoinKind.LeftOuter), // 展开合并后的字段(选择你需要的列) 展开表 = Table.ExpandTableColumn(合并表, "表2", {"字段1", "字段2"}, {"表2_字段1", "表2_字段2"}) in 展开表
- 开头加一行定义函数的代码:
- 点击完成,把这个函数保存(比如命名为
合并单文件两表)。
步骤2:导入文件夹内的所有文件列表
- 在Power Query中选择数据→获取数据→从文件→从文件夹,选择目标文件夹。
- 导入后会得到一张包含所有文件信息的表,重点保留「文件路径」列即可(其他列可以按需删除)。
步骤3:批量应用自定义函数并汇总
- 在文件夹表中,点击添加列→自定义列,输入公式:
=合并单文件两表([文件路径]),然后确定。 - 此时自定义列里会显示每个文件对应的合并后表,点击列标题右侧的展开按钮(两个向右的箭头),选择需要展开的所有字段,确定后就会得到所有文件的汇总表。
关键注意事项
- 确保所有目标Excel文件里的两张表结构一致(字段名、数据类型匹配),如果表名固定,函数里用表名索引更稳妥;如果表名不固定,用位置索引(比如
Source{0}[Data]取第一张表)更灵活。 - 如果遇到个别文件格式异常,可在函数里加错误处理逻辑,比如用
try...otherwise跳过错误文件:(Filepath as text) as table => let 结果 = try // 原来的合并逻辑 otherwise // 错误时返回空表或提示信息 Table.FromRecords({[错误信息="文件处理失败: " & Filepath]}) in 结果
内容的提问来源于stack exchange,提问作者PeterLupo




