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

Excel Power Query修改特定列标头问题求助

解决Power Query M代码中列名重命名的类型错误问题

问题根源

你错误地将OldNames列表嵌套进了另一个列表({OldNames}),传给Table.FromList后,每个待处理的元素是列表类型而非文本类型,导致Splitter.SplitTextByDelimiter无法处理,触发类型转换错误。另外代码里还有几处语法/引用错误:比如Navigation是未定义的表,in语句里的#"Added Custom1"不存在,最后一行的逗号多余。

修正后的完整代码

let
    Source = Excel.CurrentWorkbook(),
    UserExport = Source{[Name="UserExport"]}[Content],
    #"Removed Blank Rows" = Table.SelectRows(UserExport, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null}))),
    #"Promoted Headers" = Table.PromoteHeaders(#"Removed Blank Rows", [PromoteAllScalars=true]),

    // 筛选包含"Tool"的列名
    OldNames = List.Select(Table.ColumnNames(#"Promoted Headers"), each Text.Contains(_, "Tool")),
    // 对每个旧列名,拆分取连字符前的部分并修剪空格
    NewNames = List.Transform(OldNames, each Text.Trim(Text.Split(_, "-"){0})),
    // 配对旧名和新名
    NamePairs = List.Zip({OldNames, NewNames}),
    // 重命名列(注意引用正确的表:#"Promoted Headers")
    #"Renamed Columns" = Table.RenameColumns(#"Promoted Headers", NamePairs)
in
    #"Renamed Columns"

关键步骤解释

  • List.Transform(OldNames, each Text.Trim(Text.Split(_, "-"){0})):遍历每个旧列名,用Text.Split按-拆分,取拆分后的第一个元素(即工具名),再用Text.Trim去掉前后多余的空格(比如拆分后可能残留的空格)。
  • List.Zip({OldNames, NewNames}):将旧列名列表和新列名列表一一配对,生成{{旧名1, 新名1}, {旧名2, 新名2}}的格式,完全符合Table.RenameColumns的参数要求。
  • 修正了代码中的引用错误:把未定义的Navigation换成上一步的#"Promoted Headers",in语句对应最终生成的表#"Renamed Columns",同时删除了多余的逗号。

内容的提问来源于stack exchange,提问作者Sas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:43:11