如何正确清理Power Query中的列标题并仅将第一个字母大写而不更改其他字母?

问题描述 投票:0回答:2

我想清理表格的列标题,以便我的列标题具有如下名称:

  • [空格][空格][空格]名字[空格][空格]
  • [空格]MaintActType[空格]
  • 东元日期[空格]
  • 确定日期
  • ABC 指示器
  • 销货成本
  • 创建于

我想要的列标题名称如下所示:

  • 名字
  • 主要行为类型
  • 东元日期
  • 确定日期
  • ABC 指标
  • 销货成本
  • 创建于

我的代码如下:

let
    Source = Excel.Workbook(File.Contents("C:\RawData\sample.xlsx"), null, true),
    #"sample_Sheet" = Source{[Item="sample",Kind="Sheet"]}[Data],
    #"Promoted Headers" = Table.PromoteHeaders(#"sample_Sheet", [PromoteAllScalars=true]),
    #"Trim ColumnSpace" = Table.TransformColumnNames(#"Promoted Headers", Text.Trim),
    #"Split CapitalLetter" = Table.TransformColumnNames(#"Trim ColumnSpace", each Text.Combine(Splitter.SplitTextByPositions(Text.PositionOfAny(_, {"A".."Z"},2)) (_), " ")),
    #"Remove DoubleSpace" = Table.TransformColumnNames(#"Split CapitalLetter", each Replacer.ReplaceText(_, "  ", " ")),
    #"Capitalise FirstLetter" = Table.TransformColumnNames(#"Remove DoubleSpace", Text.Proper),
    #"Remove Space" = Table.TransformColumnNames(#"Capitalise FirstLetter", each Text.Remove(_, {" "})),
    #"Separate ColumnName" = Table.TransformColumnNames(#"Remove Space", each Text.Combine(Splitter.SplitTextByCharacterTransition({"a".."z"}, {"A".."Z"}) (_), " "))
in
    #"Separate ColumnName"

但是,我得到的结果如下。这不是我想要的,因为我们将所有大写字母组合在一起。我如何更改代码才能得到想要的结果?我非常感谢您的帮助。

  • 名字
  • 主要行为类型
  • TECODate
  • 查找日期
  • ABC 指示器
  • 销货成本
  • 创建于

或者,我将代码更改为:

let
   Source = Excel.Workbook(File.Contents("C:\RawData\sample.xlsx"), null, true),
   #"sample_Sheet" = Source{[Item="sample",Kind="Sheet"]}[Data],
   #"Promoted Headers" = Table.PromoteHeaders(#"sample_Sheet", [PromoteAllScalars=true]),
   #"Trim ColumnSpace" = Table.TransformColumnNames(Input, Text.Trim),
   #"Separate ColumnName" = Table.TransformColumnNames(#"Trim ColumnSpace", each Text.Combine(Splitter.SplitTextByCharacterTransition({"a".."z"}, {"A".."Z"}) (_), " ")),
   #"Capitalise FirstLetter" = Table.TransformColumnNames(#"Separate ColumnName", Text.Proper)    
in
   #"Capitalise FirstLetter"

不幸的是它返回的结果如下:

  • 名字
  • 主要行为类型
  • 东元日期
  • 结束日期
  • Abc 指示器
  • 销货成本
  • 创建于

我不知道如何再玩代码了。

header powerquery capitalization columnheader
2个回答
0
投票

一种方法是用一些东西标记现有的空格(我使用“ZZZ”)并将它们恢复到最后的空格。这是您的代码,经过一些调整。感谢您的代码。我正在尝试执行 Text.Proper,你的示例帮助了我!

let
    Source = Input,
    #"Replaced Value" = Table.ReplaceValue(Source,"[Space]"," ",Replacer.ReplaceText,{"Headers"}),
    #"Transposed Table" = Table.Transpose(#"Replaced Value"),
    #"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table", [PromoteAllScalars=true]),
    #"Trim ColumnSpace" = Table.TransformColumnNames(#"Promoted Headers", Text.Trim),
    #"Change space to ZZZ" = Table.TransformColumnNames(#"Trim ColumnSpace", each Replacer.ReplaceText(_, " ", " ZZZ ")), 
    #"Split CapitalLetter" = Table.TransformColumnNames(#"Change space to ZZZ", each Text.Combine(Splitter.SplitTextByPositions(Text.PositionOfAny(_, {"A".."Z"},2)) (_), " ")),
    #"Capitalise FirstLetter" = Table.TransformColumnNames(#"Split CapitalLetter", Text.Proper),
    #"Remove Space" = Table.TransformColumnNames(#"Capitalise FirstLetter", each Text.Remove(_, {" "})),
    #"Separate ColumnName" = Table.TransformColumnNames(#"Remove Space", each Text.Combine(Splitter.SplitTextByCharacterTransition({"a".."z"}, {"A".."Z"}) (_), " ")),
    #"Change ZZZ to space" = Table.TransformColumnNames(#"Separate ColumnName", each Replacer.ReplaceText(_, "ZZZ", " ")), 
    #"Remove DoubleSpace" = Table.TransformColumnNames(#"Change ZZZ to space", each Replacer.ReplaceText(_, "  ", " "))
in
    #"Remove DoubleSpace"

0
投票

使用 Table.TransformColumnNames (#"上一步", Text.Clean)

例如

#"删除所有控制字符" = Table.TransformColumnNames(#"升级标题", Text.Clean)

#"删除前导和尾随空格" = Table.TransformColumnNames(#"删除所有控制字符", Text.Trim)

CLUTR:清理、小写/大写、修剪、替换值/错误

© www.soinside.com 2019 - 2024. All rights reserved.