You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在Power Query中拼接表中所有列的字段值并生成新列(支持任意列数)

如何在Power Query中拼接表中所有列的字段值并生成新列(支持任意列数)

嘿,这个需求我熟!要实现任意列数下自动拼接成列名=值&列名=值格式的新列,完全不用手动指定每一列,用Power Query的列表函数就能轻松搞定,完美适配列数变化的场景。

直接上可复用的完整M代码,你只需要替换数据源的表名就行:

let
    // 加载原始数据表,把Table1替换成你实际的表名称
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    // 自动获取当前表的所有列名,适配列数变化
    ColumnNames = Table.ColumnNames(Source),
    // 添加目标新列,核心逻辑在这里
    AddConcatenatedColumn = Table.AddColumn(Source, "x", (currentRow) =>
        let
            // 遍历所有列名,生成「列名=对应值」的字符串列表
            NameValuePairs = List.Transform(ColumnNames, each _ & "=" & Text.From(currentRow[_])),
            // 用&符号把列表里的所有片段拼接成完整字符串
            ConcatenatedText = Text.Combine(NameValuePairs, "&")
        in
            ConcatenatedText
    )
in
    AddConcatenatedColumn

关键逻辑拆解

我给你把核心部分拆解开讲,方便你理解和修改:

  • 自动识别列名ColumnNames = Table.ColumnNames(Source)会自动抓取当前表的所有列名,不管你后续加列、删列,这段代码都不用改。
  • 逐行处理数据:这里没有用普通的each,而是用了(currentRow) =>的写法,这样我们能在函数内部直接拿到当前行的所有数据,方便调用每一列的值。
  • 生成键值对列表List.Transform遍历每个列名,把列名和当前行对应的值拼接成列名=值的格式,Text.From是为了把数字、日期这类非文本类型转成文本,避免类型不匹配报错。
  • 拼接成最终字符串Text.Combine用指定的分隔符(这里是&)把列表里的所有键值对片段连成一个完整的字符串。

可选优化:处理空值场景

如果你的表中存在空值,不想让拼接结果出现列名=这种空片段,可以给逻辑加个空值判断,自动跳过空值列:
NameValuePairs那行替换成下面的代码即可:

NameValuePairs = List.RemoveNulls(List.Transform(ColumnNames, each if currentRow[_] <> null then _ & "=" & Text.From(currentRow[_]) else null)),

这样就搞定啦!不管你的表是2列还是10列,这段代码都能自动适配,完全不用手动调整列名~

火山引擎 最新活动