Как правильно очистить заголовок столбца в Power Query и использовать только первую букву с заглавной буквы, не меняя другую букву?

Я хотел бы очистить заголовок столбца таблицы, чтобы заголовок моего столбца имел имя, как показано ниже:

  • [Пробел][Пробел][Пробел] Имя [Пробел][Пробел]
  • [Пробел]MaintActType[Пробел]
  • Дата TECO [Пробел]
  • Дата FIN
  • Индикатор ABC
  • КОГС
  • Создано на

И мое желаемое имя заголовка столбца должно быть таким, как показано ниже:

  • Имя
  • Тип основного акта
  • TECO Дата
  • Дата FIN
  • Индикатор 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"

Однако я получаю результат, как показано ниже. Это не то, что я хотел, поскольку все заглавные буквы мы объединили вместе. Как изменить код, чтобы получить желаемый результат? Я был бы очень признателен за вашу помощь, пожалуйста.

  • Имя
  • Тип основного акта
  • TECO Date
  • НАЙТИ
  • ABCIndicator
  • КОГС
  • Создано на

В качестве альтернативы я изменил код на:

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"

К сожалению, он возвращает такой результат:

  • Имя
  • Тип основного акта
  • Teco Date
  • Дата окончания
  • Индикатор ABC
  • КОГС
  • Создано на

Я больше не знаю, как играть с кодом.

1 ответ

Один из способов - пометить существующие пробелы чем-то (я использовал «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"
Другие вопросы по тегам