可利用power query的“从文件夹”功能批量导入并合并结构一致的excel文件或工作表;支持同一工作簿多表合并、参数化路径动态更新及列名不一致时的映射统一处理。

如果您需要将同一文件夹下的多个Excel工作簿或工作表数据自动汇总到一个工作表中,则可以利用Power Query的“从文件夹”功能批量导入并合并。以下是实现此目标的具体操作步骤:
一、使用Power Query从文件夹导入并合并Excel文件
该方法适用于文件夹内所有Excel文件结构一致(如每张表都有相同列名和数据格式),Power Query会自动识别并堆叠各文件中的指定工作表。操作前请确保所有Excel文件已关闭,且不包含密码保护或受保护视图限制。
1、在Excel中,点击【数据】选项卡,选择【获取数据】→【从文件】→【从文件夹】。
2、在弹出窗口中,浏览并选中目标文件夹路径,点击【确定】。
3、Power Query编辑器中将显示该文件夹下所有文件列表,等待预览加载完成后,点击右上角【转换数据】按钮进入高级编辑界面。
4、在查询编辑器左侧,找到名为“Content”的列,右键选择【删除其他列】,仅保留该列。
5、选中“Content”列,点击【转换】→【使用第一行作为标题】(若源表首行为列名)。
6、点击【主页】→【合并查询】→【合并查询为新查询】,在弹出窗口中:左表选当前查询,右表选“示例文件”(即任意一个原始Excel文件的Sheet),匹配列为“Name”与“Sheet Name”,勾选【使用完整文件路径进行匹配】(如需按特定表名筛选可后续添加筛选器)。
7、展开合并后的“Transform File”列,取消勾选【使用原始列名作为前缀】,仅保留数据列,点击【确定】。
8、点击【主页】→【关闭并上载】,数据将自动加载至新工作表中。
二、通过Power Query合并同一工作簿内多个工作表
当所有待汇总数据位于同一个Excel文件的不同工作表中,且各表结构相同,可直接引用该文件内部多个Sheet,避免重复导入文件夹。此方式跳过文件系统扫描,响应更快、稳定性更高。
1、在Excel中,点击【数据】→【获取数据】→【从工作簿】,选择目标Excel文件并点击【导入】。
2、在导航器窗口中,取消勾选【启用导航器】,直接点击左下角【转换数据】进入Power Query编辑器。
3、在查询编辑器中,右侧“查询”窗格列出所有工作表名称,按住Ctrl键多选需合并的表名(如“销售1月”“销售2月”“销售3月”)。
4、右键所选多个查询,选择【合并查询】→【合并为新查询】,保持默认设置,点击【确定】。
5、新生成的合并查询中,“Source.Name”列显示原表名,可将其保留用于后续分类标识;点击该列右侧的展开图标,勾选全部数据列,取消勾选【使用原始列名作为前缀】。
6、检查数据类型是否正确(如日期列应为日期类型),必要时点击列标题右侧的类型图标进行更正。
7、点击【主页】→【关闭并上载至】,选择【现有工作表】或【新工作表】完成加载。
三、使用参数化文件路径实现动态文件夹合并
当需定期更新不同文件夹路径下的数据(如每月新建子文件夹),可通过创建参数控制文件夹路径,避免每次手动修改查询源。该方法提升复用性,适合固定命名规则的归档结构。
1、在Power Query编辑器中,点击【主页】→【高级编辑器】,在空白查询中输入:FolderPath = "C:\Reports\2024\Q1\",然后点击【完成】并重命名为“Param_FolderPath”。
2、新建查询,点击【高级编辑器】,输入:Source = Folder.Files(Param_FolderPath),保存并重命名为“Query_FolderImport”。
3、对“Query_FolderImport”执行与方法一相同的清洗步骤(删除列、提取Content、展开Excel内容等)。
4、后续如需切换文件夹,只需双击“Param_FolderPath”查询,在公式栏中修改路径字符串即可,无需重录整个流程。
5、为防止路径错误导致查询失败,可在“Query_FolderImport”中添加条件筛选:选中“Extension”列,点击【筛选器】→【文本筛选器】→【等于】,输入“.xlsx”,排除非Excel文件。
四、处理列名不一致的多表合并
当各Excel文件或工作表的列名存在差异(如“客户ID”“客户编号”“cust_id”均表示同一字段),直接堆叠会导致列错位或空值。此时需统一列名映射关系,再执行合并。
1、在Power Query编辑器中,先对任一源表执行【转换】→【转置】→【转置】,确认其列名实际顺序与语义对应关系。
2、新建空白查询,点击【高级编辑器】,输入标准列名映射表,例如:StandardColumns = #table({"OriginalName","StandardName"}, {{"客户ID","CustomerID"},{"客户编号","CustomerID"},{"cust_id","CustomerID"}})。
3、在主合并查询中,对每一行数据源添加自定义列,调用函数将原始列名替换为标准列名,使用Table.RenameColumns动态重命名。
4、重命名完成后,使用【合并列】功能将所有表统一为相同结构,再执行堆叠合并(Combine Bin)。
5、合并后点击【转换】→【填充】→【向下】,确保关键标识字段(如客户ID)在跨行数据中不丢失。










