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
相关产品推荐
相关产品推荐

