Registriert seit: 23.08.2024
Version(en): 365
28.10.2025, 14:04
(Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2025, 14:04 von Jack_d.)
Hallo Zusammen ich bräuchte mal ne gedankliche Hilfestellung. Beim laden verschiedener CSVen kann es sein, das Spaltenüberschriften variieren. gibt es die Mögllichkeit in PQ das zu flexibilisieren? also das ich händsich eine Liste / Formel erstelle die sich dann wahlweise anwendet. Also die Spalte soll zB "Boot" heissen (und so ist sie auch bei vielen hinterlegt) jetzt gibt es aber Dateien wo "U-Boot" steht oder "BOOT" PQ soll dann im die Spalte neu benamsen wenn sie anders heisst. so in der Art.: If(Spaltenname = "U-Boot" or Spaltenname = "BOOT" then RenameSpalte) Und das idealerweise vielleicht auch innerhalb der bestehenden Spalte und nicht mit Spalten hinzufügen und löschen iCh freu micha uf eure Ideen Grüße JAck Edith hat schon eine mögliche Lösung Code: // Tab Bereinigen Titel_Down = Table.DemoteHeaders(Expand_Tab), TransposeTable_UpsideLeft = Table.Transpose(Titel_Down), //Spaltenname korrigieren ReplaceVal_Spaltenname = Table.ReplaceValue(TransposeTable_UpsideLeft,"U-Boot","Boot",Replacer.ReplaceText,{"Column1"}), Filter_EmptyCol = Table.SelectRows(ReplaceVal_Spaltenname, each not Text.Contains([Column1], "_")), TransposeTable_LeftUpside = Table.Transpose(Filter_EmptyCol), Titel_Up = Table.PromoteHeaders(TransposeTable_LeftUpside, [PromoteAllScalars=true]),
Registriert seit: 28.08.2022
Version(en): 365
Hi, das Einfachste wäre es, die Spaltenüberschriften nicht mit Table.PromoteHeaders() nach oben zu holen, sondern die Spalten selbst zu benennen und dann die erste Zeile (die mit den Überschriften) zu löschen. Das funktioniert natürlich nur, wenn die Spalten immer in derselben Reihenfolge kommen. Ansonsten müsste auch so was wie Code: =Table.RenameColumns(#"Dein vorheriger Schritt", List.Transform( Table.ColumnNames(#"Dein vorheriger Schritt"), each {_, Text.Replace(_, "U-BOOT", "Boot")} ))
funktionieren. Wobei du #"Dein vorheriger Schritt" durch den Namen deines zuletzt verwendeten Schrittes ersetzen musst. Für weitere Werte außer "U-BOOT" brauchst du natürlich jeweils einen weiteren Schritt. Wobei du das auch für jede erdenkliche Groß-/Kleinschreibung machen musst. Vielleicht hat ja jemand noch eine bessere Idee.
Gruß, Helmut
Win10 - Office365 / MacOS - Office365
Registriert seit: 23.08.2024
Version(en): 365
28.10.2025, 14:42
(Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2025, 14:42 von Jack_d.)
Hallo Helmut Danke für deinen INPUT! Zitat:Das funktioniert natürlich nur, wenn die Spalten immer in derselben Reihenfolge kommen. Das ist genau das Problem.. Zitat:Für weitere Werte außer "U-BOOT" brauchst du natürlich jeweils einen weiteren Schritt. Wobei du das auch für jede erdenkliche Groß-/Kleinschreibung machen musst. Ja, das hab ich bald befürchtet. Eine Liste wäre hier ganz nett Grüße Jack
Registriert seit: 09.01.2022
Version(en): Microsoft 365
Du kannst vermutlich auch die Import-Header einfach generell ignorieren und einen eigenen Header erstellen.
Registriert seit: 28.08.2022
Version(en): 365
Das ist das, was ich mit meinem ersten Satz beschrieben habe
Gruß, Helmut
Win10 - Office365 / MacOS - Office365
Registriert seit: 23.08.2024
Version(en): 365
Moin WS53
wie meinst du das? Ansonsten hat Helmut ja schon gesagt - müssten die Spalten in ihrer Position identisch sein
VG Jack
Registriert seit: 12.07.2025
Version(en): 2021
28.10.2025, 16:23
(Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2025, 16:24 von Andreas Killer.)
(28.10.2025, 14:42)Jack_d schrieb: Ja, das hab ich bald befürchtet. Eine Liste wäre hier ganz nett Sagen wir mal Deine CSV hat die Spalten "Nr;uboot" und Du willst nur "uboot" aber das als "U-Boot". Table.RenameColumns sollte klar sein, dem Ding über gibst Du eine List of List mit jeweils {"alt", "neu"}. https://learn.microsoft.com/de-at/powerq...amecolumnsMach eine Parametertabelle mit altem und neuem Überschriften, jede Spalte ist eine Liste und dann ersetzt Du die Spalten via List.ReplaceMatchingItems https://learn.microsoft.com/de-at/powerq...chingitemsAlles klar?
test.zip (Größe: 15,41 KB / Downloads: 4)
Andreas. Code: // test let Source = Csv.Document(File.Contents("Z:\test.csv"),[Delimiter=";", Columns=2, Encoding=1252, QuoteStyle=QuoteStyle.None]), #"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]), Custom1 = fnRemoveRenameColumns(#"Promoted Headers", "Parameter") in Custom1
// fnRemoveRenameColumns let fnRemoveRenameColumns = (Source as table, ParameterTable as text, optional OldHeaders as text, optional NewHeaders as text) => let // Prepare PT = Excel.CurrentWorkbook(){[Name = ParameterTable]}[Content], OH = if OldHeaders = null then Table.ColumnNames(PT){0} else OldHeaders, NH = if NewHeaders = null then Table.ColumnNames(PT){1} else NewHeaders, // Find the columns to be removed rParaTable = Table.SelectRows(PT, each (Record.Field(_, NH) = null) or (Record.Field(_, NH) = "")), rOldHeaders = Table.Column(rParaTable, OH), // Which one exists in source? rRemoveHeaders = List.Intersect({Table.ColumnNames(Source), rOldHeaders}), rSource = Table.RemoveColumns(Source, rRemoveHeaders), // Find the columns to be renamed kParaTable = Table.SelectRows(PT, each (Record.Field(_, NH) <> null) and (Record.Field(_, NH) <> "")), kOldHeaders = Table.Column(kParaTable, OH), kNewHeaders = Table.Column(kParaTable, NH), // Which one exists in source? rColumnNames = Table.ColumnNames(rSource), kColumnNames = List.ReplaceMatchingItems(rColumnNames, List.Zip({kOldHeaders, kNewHeaders}), Comparer.OrdinalIgnoreCase), kSource = Table.RenameColumns(rSource, List.Zip({rColumnNames, kColumnNames})), // Reorder oColumnNames = Table.ColumnNames(kSource), oNewHeaders = List.Intersect({kNewHeaders, oColumnNames}), Result = Table.ReorderColumns(kSource, oNewHeaders) in Result , documentation = [ Documentation.Name = "fnRemoveRenameColumns", Documentation.Description = "Removes, renames and reorders the columns of a table from a setup table", Documentation.LongDescription = Documentation.Description, Documentation.Category = "Table", Documentation.Source = "andreas.killer@gmx.net", Documentation.Version = "1.1", Documentation.Author = "Andreas Killer", Documentation.Examples = {[ Description = "", Code = " Source : The source table to be modified ParameterTable : Name of the parameter table in Excel ParameterName : Text to be found in the ParameterColumn OldHeaders : Name of the column containing the old headers (in the source table) (1st column if omitted) NewHeaders : Name of the column containing the new headers (aligned row by row) (2nd column if omitted)
If the row in NewHeaders is blank the specified column in OldHeaders is removed from the table. Otherwise the column is renamed if found. ", Result = ""]}] in Value.ReplaceType(fnRemoveRenameColumns, Value.ReplaceMetadata(Value.Type(fnRemoveRenameColumns), documentation))
Registriert seit: 23.08.2024
Version(en): 365
Hallo Andreas,
das ist toll! Ich habs glaub auch verstanden und versuch mich an der Anpassung =)
Danke!
VG JAck
Registriert seit: 29.09.2015
Version(en): 2030,5
oder man ändert die CSV-Dateien: Code: With CreateObject("scripting.filesystemobject") .createtextfile("D:\OF\beispiel.csv").write Replace(Replace(.OpenTextFile("D:\OF\Beispiel.csv").ReadAll, "U-Boot", "Boot"), "BOOT", "Boot") End With
Registriert seit: 23.08.2024
Version(en): 365
Moin SNB
hatte ich auch drüber nachgedacht. ICh hatte jedoch vor geraumer Zeit genau damit mal Probleme. In manchen Dateien ist ein Datum mit Uhrzeit drin.
im Format: YYYYMMDDHHMMSS und beim bearbeiten der CSV hat es mir jedes mal dieses Datum zerschossen und die Zeiten auf 0:00 gesetzt. Daher bin ich davon abgekommen.
Gab dazu im MOF auch nen recht langen Thread
Grüße Jack
|