Power Query追加跨工作簿表格时保留来源名称的实现方案
Power Query 跨工作簿合并保留来源列实现方案
我目前使用以下Power Query代码实现不同工作簿的表格追加操作:
let Source = Excel.CurrentWorkbook(){[Name="table1"]}[Content], #"Changed Type" = Table.TransformColumnTypes(Source,{{"Workbook location", type text}, {"Workbook name", type text}, {"Table name", type text}}), #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each Excel.Workbook(File.Contents([Workbook location]&[Workbook name])){[Item=[Table name],Kind="Table"]}[Data]), #"Combine" = Table.Combine(#"Added Custom"[Custom]) in #"Combine"
现有代码可正常运行:表格可成功合并追加,刷新后源表新增的列也会自动纳入查询结果。但需要在最终查询结果中保留[Workbook name]列,以此识别每条记录对应的来源文件。
已知使用Table.ExpandTableColumn可实现保留来源列的效果,但该方法存在缺陷:无法在刷新时自动纳入源表新增的列。
期望实现的效果如下所示:
修改后代码
核心逻辑是在读取单个源表的步骤就给子表追加来源文件名列,再统一合并,全程不固定列名,兼顾来源标识保留和新增列自动同步的需求:
let Source = Excel.CurrentWorkbook(){[Name="table1"]}[Content], #"Changed Type" = Table.TransformColumnTypes(Source,{{"Workbook location", type text}, {"Workbook name", type text}, {"Table name", type text}}), #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each let SourceTable = Excel.Workbook(File.Contents([Workbook location]&[Workbook name])){[Item=[Table name],Kind="Table"]}[Data], AddSourceCol = Table.AddColumn(SourceTable, "Workbook name", (inner)=>[Workbook name], type text) in AddSourceCol ), #"Combine" = Table.Combine(#"Added Custom"[Custom]) in #"Combine"
实现说明
- 读取单个子表时通过嵌套let语句隔离作用域,给每个子表单独添加来源列,列值取当前配置行对应的工作簿名称
- 未使用
Table.ExpandTableColumn固定展开列列表,Table.Combine会自动对齐所有子表的列结构,源工作簿新增列后刷新即可自动同步到合并结果 - 若需要额外保留工作簿存储路径、源表名等标识,按照相同逻辑在子表添加对应列即可。
内容的提问来源于stack exchange,提问作者SuavestArt
相关产品推荐
相关产品推荐

