You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 14:09:21