16.06.2024, 18:28 (Dieser Beitrag wurde zuletzt bearbeitet: 16.06.2024, 18:28 von rate mit.)
Hallo zusammen,
heute möchte ich euch wieder einmal um Hilfe bitten.
Ich möchte aus einem Ordner, der PDF Dateien erhält, diese per Power Query in ein Excel - Arbeitsblatt einlesen.
Das Problem dabei ist, das die Bezeichnung der 1. Spalte nicht einheitlich ist, sondern das es dort zu Rechtschreibfehlern gekommen ist. In meinem Beispiel ist dies Überschrift <> Überschrit...
Wenn ich nun die Daten einlesen möchte, erhalte ich nur diese, die mit der 1. Spalte übereinstimmt - ich benötige aber alle Daten...
Eine Möglichkeit wäre, das ich die Datei "Überschrift" lösche - wenn ich dann aber die Daten aktualisieren will, dann bekomme ich eine Fehlermeldung, weil ja die 1. Spalte dann "Überschrit" heißt und somit nicht eingelesen werden kann...
Im Anhang habe ich mal mein Wunschergebnis eingestellt... (wenn es einfacher ist, dann können auch die Spalten "Überschrift" und "Überschrit" nebeneinander stehen...)
zuerst einmal Vielen Dank für deine schnelle Antwort....
Also wenn ich als Laie mir das ansehe, werden die Überschriften nicht "direkt" ignoriert, sondern du filterst erst "etwas" und benennst es dann um... und genau diesen Schritt benötige ich, damit es dann tatsächlich direkt umgesetzt wird...
16.06.2024, 20:31 (Dieser Beitrag wurde zuletzt bearbeitet: 16.06.2024, 20:42 von Ralf A.)
Hi,
mal aus der Hüfte geschossen (ohne mir jetzt die Dateien anzusehen - will ja gleich EM anschauen... ).
Wenn Dateien aus einem Ordner eingelesen werden, wird ja immer die 1. als Beispiel genommen und die anderen nach diesem Schema bearbeitet. Ich würde also die 1. Datei einlesen lassen, eine Liste der Spaltenüberschriften erstellen und die falsch benannte Spalte dieser Liste (Achtung! Nullbasiert) in der Quelle umbenennen. Über die Liste ist es egal wie die Spalten heißen (oder ob da Tippfehler dabei sind), weil ja der Listindex verwendet wird. Das würde dann als Schema für alle anderen Dateien genau so übernommen. Allerdings muss die Reihenfolge identisch sein. Ansonsten müsstest Du sie doch einzeln einlesen und die Abfragen miteinander veknüpfen.
Bsp.:
PHP-Code:
let Jahr = "2022", Quelle = Excel.CurrentWorkbook(){[Name="tblJahr" & Jahr]}[Content], Spaltenüberschriften = Table.ColumnNames(Quelle),
/* Nicht vergessen: Listen sind Nullbasiert! :) Spaltenüberschriften{0} wäre hier im Beispiel die Spalte Filiale usw... Filiale {0} Verkäufer {1} Gew. 2022 {2} Ums. 2022 {3} Kost. 2022 {4} */
//Alle Spalten mit Jahreszahl umbenennen ohne Leerzeichen und Jahr... Nicht vergessen - Listenname ist: Spaltenüberschriften ÜberschriftUmbenennen = Table.RenameColumns(Quelle,{{Spaltenüberschriften{3}, "Umsatz"},{Spaltenüberschriften{4}, "Kosten"},{Spaltenüberschriften{2}, "Gewinn"}}) in ÜberschriftUmbenennen
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
16.06.2024, 20:34 (Dieser Beitrag wurde zuletzt bearbeitet: 16.06.2024, 20:54 von rate mit.)
Hallo Ralf A,
auch dir vielen Dank für deine Antwort....
Ich würde das ja gern so machen... ich habe nur leider keine Ahnung, wie das geht.... da fehlt mir schlicht und einfach das Fachwissen...
Die Spalte kann auch ganz einfach namenlos bleiben... mir geht es wirklich nur darum, alle Daten zu erhalten... auswerten muss ich die dann ja sowieso noch...
@ws-53 - möglicherweise habe ich das schon in meiner Datei gehabt und es nur nicht gesehen.... oder ich verwechsel es... - dennoch habe ich es noch nicht herausgefunden, wie es einfach und direkt eingelesen werden kann... @ Ralf A,
wo und/oder wie gebe ich denn dein Beispiel ein?
Wie breits erwähnt, reicht es schon aus, das die Spalte eingelesen wird... die Bezeichnung ist wirklich egal...
16.06.2024, 22:05 (Dieser Beitrag wurde zuletzt bearbeitet: 16.06.2024, 22:06 von Ralf A.)
...Moment mal... EM und Forum sind eben nicht so recht kompatibel... Da sind doch auf den 1. Blick nicht die Spaltennamen falsch, nur die Dateinamen unterschiedlich, was ja in einem Ordner auch nicht anders geht uns somit völlig normal ist... in diesem Fall Menü Daten--> Daten abrufen --> Aus Datei --> aus Ordner
Pack die 3 Dateien mal in ein Zip-Archiv und lade das hoch, dann muss ich nicht 3 Dateien downloaden... ich schau mir das evtl. morgen mal an...
Das Bsp.ist ja nur ein Bsp. Du bräuchtest ja noh eine entsprechende Tabelle mit den im Bsp. vorhandenen Namen und die formatierte Tabelle müsste tblJahr heißen. Den M-Code kannst Du im Erweiterten Editor (Menü Start) des PQ Editors einfügen
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
Ich versuche es noch einmal genauer zu beschreiben...
Die Dateien sind in einem Ordner gespeichert und haben natürlich unterschiedliche Namen.
Um bei meinem Beispiel zu bleiben: Das Hauptproblem ist nicht der Dateiname sondern die Spaltenüberschrift. In Mappe 1 ist in B1 "Überschrift" - in der Datei "Überschrift" ist auch die 1. Spalte mit "Überschrift" bezeichnet - B2 bis B4 ist ausgefüllt - so weit so schön...
Und nun kommt das Problem - weil in der Datei "Überschrit" und eben nicht "Überschrift" steht, steht in B5 - B7 nichts ... (ich vermute mal, das es so ist...)
Es wäre also am Besten, wenn man einfach in B1 eine "unbestimmte" Bezeichnung (z.B. Column1) steht und dann alle Daten aus Spalte 1 aller Datei(namen) eingeladen werden...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
Da bei mir die Testfiles im allgemeinen Download-Ordner sind, muss ich die relevanten Dateinamen filtern.
Der Unterschied ist in der automatisch generierten Funktion zu finden. Bei dir werden die Daten von "Page001", somit alle Daten, importiert, während diese mir von "Table001", somit nur die Daten der erkannten Tabelle, importiert werden.
Das kann damit zusammenhängen, dass ich in meiner Version mich als "Insider" eingetragen habe und somit Power Query schon neuere Funktionen enthält.
Deine Funktion: let Quelle = (Parameter1) => let Quelle = Pdf.Tables(Parameter1, [Implementation="1.3"]), Page1 = Quelle{[Id="Page001"]}[Data], #"Höher gestufte Header" = Table.PromoteHeaders(Page1, [PromoteAllScalars=true]) in #"Höher gestufte Header" in Quelle
Meine Funktion: let Quelle = (Parameter1) => let Source = Pdf.Tables(Parameter1, [Implementation="1.3"]), Table001 = Source{[Id="Table001"]}[Data] in Table001 in Quelle
Jetzt habe ich deinen Vorschlag mal ausprobiert und nur die "Tabelle" ausgewählt... das funktioniert auch soweit... bei der Originaldatei sind es 5 Tabellen... und ich benötige noch Informationen aus dem PDF - Blatt, die in keiner dieser 5 Tabellen aufgeführt sind...