Ich habe eine csv.txt mit fester Breite, zB
Martin Junger 12
John Wing 124
Um es mit PowerQuery zu laden, wird diese Syntax verwendet:
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"
Ich muss also für jede Spalte in CSV einen neuen Befehl erstellen, Table.SplitColumn
was überhaupt nicht praktisch ist. Gibt es eine Syntax, um dies in einem Befehl zu tun?
Danke
Antwort1
Obwohl es in der Dokumentation nicht erwähnt wird, akzeptiert Csv.Document eine Liste als „optionales Trennzeichen“-Argument, das die (nullbasierte) Startposition jeder Spalte angibt. Sie können dies unten in der von PQ generierten Abfrage sehen, als ich es auf diese Datei gerichtet habe (z. B. mit Excel 2016: Datenband / Neue Abfrage / Aus Datei / Aus Text). Das „optionale Trennzeichen“-Argument lautet:{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"
Antwort2
Sie müssen das PowerQuery-Plugin für Excel nicht verwenden, um eine feste Breite zu importieren – es ist integriert.
Schritte:
- Registerkarte „Daten“ aus Text (Abschnitt „Externe Daten abrufen“)
- Wählen Sie Ihre CSV-Datei
- Achten Sie darauf, dass der Textimport-Assistent geöffnet wird
- Wählen Sie unter: Ursprünglicher Datentyp „Feste Breite“
- Fahren Sie mit den Schritten des Assistenten fort.