如何使用 header 中的特定字符串重命名列 header

How to rename a column header with a specific string from that header

我的公司使用电子表格来记录制造数据,但他们也使用电子表格向用户提供说明。这些说明在header列中,用于他们需要记录的数据。我正在尝试从这个电子表格为质量工程师创建一个报告,我需要能够从列中提取特定的字符串以用作列名。幸运的是,我需要的字符串在括号内,通过降级 header 和转置,我能够添加一个新列并在分隔符之间提取文本。但是,在这一点上,我不知道如何用提取的列名替换原来的列名。

无需转置等

您可以只列出新的列名称并进行重命名。

下面的代码假设

  • 需要重命名的列将重命名为括号header中的部分
  • 带括号的字符串永远不会出现在现有列名的开头
  • 只会有一个带括号的字符串
let
    Source = Excel.CurrentWorkbook(){[Name="Table10"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{
        {"Date", type date}, {"Shop Order", Int64.Type}, {"Month", type text}, 
        {"Day", Int64.Type}, {"Year", Int64.Type}, {"Shift", Int64.Type}, 
        {"SCAN: New Antioxidant:#(lf)(P/N A14656-1)#(lf) Lot Number", type text}, 
        {"Scan: #(lf)Resin (PN A14658-1#(lf))Lot Number", type text}}),

//rename columns
    origColNames=Table.ColumnNames(#"Changed Type"),

//List.Transform modifies only those column names that have the parenthesized substring
    newColNames = List.Transform(origColNames, each let x=Text.SplitAny(_,"()") in if List.Count(x)=1 then x{0} else x{1}),

    renamedHdrs = Table.RenameColumns(#"Changed Type", List.Zip({origColNames,newColNames}))

in
    renamedHdrs

编辑新列 header 数据

  • 您在示例中添加了一些有问题的列。
  • 想要修改的列header似乎在字符串末尾有带括号的数据。
  • 如果情况总是如此,您可以通过更改 newColNames 行在代码中处理:
    newColNames = List.Transform(origColNames, each 
        let x=Text.SplitAny(_,"()") 
        in 
            if List.Last(x) = "" or List.Count(x) = 1 
            then _ 
            else x{1}),

算法

  • 在括号
  • 上拆分header
  • 检查拆分的最后一个元素
    • 如果最后一个元素是空字符串("")或者只有一个元素,那么return原来的header;否则 return 第二个元素。