У меня есть 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
команду, что совсем не удобно. Есть ли какой-нибудь синтаксис, чтобы сделать это одной командой?
Спасибо
решение1
Хотя это не упоминается в документе, 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"
решение2
Вам не нужно использовать плагин PowerQuery для Excel, чтобы импортировать данные фиксированной ширины — он встроен.
Шаги:
- Вкладка «Данные из текста» (раздел «Получить внешние данные»)
- Выберите ваш CSV-файл
- Видим, что открывается мастер импорта текста.
- В: Исходный тип данных выберите «Фиксированная ширина»
- Продолжайте следовать указаниям мастера по мере необходимости.