如何用Power Query提取多Excel文件中TTP与TTL工作表间的数据?
提取Excel文件中指定工作表之间的数据(Power Query实现)
完全可行,以下是具体的Power Query实现步骤和代码:
核心思路
先获取每个Excel文件的所有工作表列表,定位目标工作表"TTP"和"TTL"的位置,筛选出处于二者之间的工作表后,加载对应数据。
步骤1:导入文件夹数据
- 打开Power Query,依次点击【数据】>【获取数据】>【从文件】>【从文件夹】,选择存放Excel文件的目标文件夹。
- 加载文件夹数据后,保留
Content(文件内容)和Name(文件名)列即可。
步骤2:添加自定义列筛选中间工作表
添加一个自定义列(命名为筛选后的工作表),输入以下M代码:
let // 获取当前文件的所有工作表元数据 工作表列表 = Excel.Workbook([Content], null, true)[Sheets], // 提取所有工作表名称 名称列表 = List.Transform(工作表列表, each [Name]), // 定位TTP和TTL的位置索引 TTP索引 = List.PositionOf(名称列表, "TTP"), TTL索引 = List.PositionOf(名称列表, "TTL"), // 筛选TTP之后、TTL之前的工作表(排除TTP和TTL本身) 中间工作表 = if TTP索引 <> -1 and TTL索引 <> -1 and TTP索引 < TTL索引 then List.Range(工作表列表, TTP索引 + 1, TTL索引 - TTP索引 - 1) else {} in 中间工作表
代码说明
Excel.Workbook([Content], null, true)[Sheets]:读取当前Excel文件的所有工作表信息,包含名称、数据等字段。List.PositionOf:查找"TTP"和"TTL"在工作表列表中的位置,若不存在则返回-1。List.Range:截取TTP之后到TTL之前的工作表片段,仅保留中间表。- 逻辑判断:仅当两个目标表都存在且TTP在TTL位置靠前时,才提取中间表,避免无意义的数据加载。
步骤3:展开并处理数据
点击筛选后的工作表列右侧的展开按钮,选择【仅展开数据】,后续可根据需求调整数据类型、合并字段等。
特殊需求:按名称字典序筛选
如果你的需求是按工作表名称的字典序(而非实际位置)筛选介于"TTP"和"TTL"之间的表,可替换自定义列代码为:
let 工作表列表 = Excel.Workbook([Content], null, true)[Sheets], 名称列表 = List.Transform(工作表列表, each [Name]), // 按名称排序后筛选符合条件的名称 中间名称 = List.Select(List.Sort(名称列表), each _ > "TTP" and _ < "TTL"), // 匹配对应的工作表数据 中间工作表 = List.Select(工作表列表, each List.Contains(中间名称, [Name])) in 中间工作表
内容的提问来源于stack exchange,提问作者PMDSMW
相关产品推荐
相关产品推荐

