У меня фиксированная ширина csv.txt, например

Martin    Junger    12    
John      Wing      124

Чтобы загрузить его с PowerQuery этот синтаксис используется:

let
    Source = Csv.Document(File.Contents("C:\csv.txt"),null,";",null,1251),
    #"Split Column name" = Table.SplitColumn(Source,"Column1",Splitter.SplitTextByPositions({0, 10}, false),{"name", "ColumnOther"}),
    #"Split Column surname" = Table.SplitColumn(#"Split Column name","ColumnOther",Splitter.SplitTextByPositions({0, 10}, false),{"surname", "ColumnOther"}),
    #"Split Column salary" = Table.SplitColumn(#"Split Column surname","ColumnOther",Splitter.SplitTextByPositions({0, 3}, false),{"salary", "ColumnOther"})
in
    #"Split Column salary"

Поэтому для каждого столбца в CSV мне нужно создать новую Table.SplitColumn которая совсем не удобна. Есть ли синтаксис, чтобы сделать это в одной команде?

Спасибо

2 ответа2

0

Вам не нужно использовать плагин PowerQuery для Excel для импорта фиксированной ширины - он встроен.

шаги:

  1. Вкладка "Данные из текста" (раздел "Получение внешних данных")
  2. Выберите ваш CSV-файл
  3. Посмотрите, что это вызывает Мастер импорта текста
  4. В: Исходный тип данных выберите "Фиксированная ширина"
  5. Действуйте через мастера соответствующим образом

0

Хотя это не упомянуто в документе, Csv.Document принимает список в качестве аргумента "необязательный разделитель", указывая начальную позицию каждого столбца (начиная с нуля). Вы можете увидеть это ниже в Запросе, сгенерированном PQ, когда я указал его на этот файл (например, в Excel 2016: Лента данных / Новый запрос / Из файла / Из текста). Аргумент "необязательный разделитель": {0,10,20}

let Source = Csv.Document(File.Contents("C:\csv.txt"),null,{0,10,20},null,1252), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}, {"Column3", Int64.Type}}) in #"Changed Type"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .