如何使用 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 第二个元素。
我的公司使用电子表格来记录制造数据,但他们也使用电子表格向用户提供说明。这些说明在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 第二个元素。
- 如果最后一个元素是空字符串(