HERBERS Excel-Forum - das Archiv

Thema: Daten aus PDF auslesen

Daten aus PDF auslesen
Theo
Hallo zusammen,

ich habe zwar schon kräftig gegoogelt, irgendwie finde ich aber noch nicht den richtigen Weg. Ich muss Daten aus vielen PDF files auslesen. Die PDF Files sind zumindest für das menschliche Auge eigentlich identisch aufgebaut (im Prinzip eine Tabelle), kann aber manchmal auch mehr als eine Seite beiinhalten. Mit PowerQuery konnte ich das aufzeichnen und habe letztendlich auch eine Funktion hinbekommen, die bei mir mit 90% der PDF Files funktioniert. Die Funktion versagt lediglich wenn mehr als eine Seite importiert werden muss. Gibte es eine Möglichkeit meinen Code etwas "generischer" zu gestalten, so dass er auch funktioniert wenn das Format des PDF Files sich ändert (zb mehr Spalten, mehr Seiten etc)


Function GetDataFromPDF(StrPDFPath As String) As Boolean

On Error Resume Next
ActiveWorkbook.Queries("Page001").Delete
Tbl_page1.Cells.Clear
Tbl_page2.Cells.Clear
Tbl_page3.Cells.Clear
On Error GoTo DidNotWork

ActiveWorkbook.Queries.Add Name:="Page001", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Pdf.Tables(File.Contents(""" & StrPDFPath & """), [Implementation=""1.3""])," & Chr(13) & "" & Chr(10) & " Page1 = Source{[Id=""Page001""]}[Data]," & Chr(13) & "" & Chr(10) & " #""Changed Type"" = Table.TransformColumnTypes(Page1,{{""Column1"", type text}, {""Column2"", type text}, {""Column3"", type text}, {""Column4"", type text}, {""Column5""," & _
" type text}, {""Column6"", type text}, {""Column7"", type text}, {""Column8"", type text}, {""Column9"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Changed Type"""
With Tbl_page1.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=Page001;Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [Page001]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Page001_2"
.Refresh BackgroundQuery:=False
End With
GetDataFromPDF = True

DidNotWork:
End Function


Danke für Eure Hilfe!

Theo
AW: Daten aus PDF auslesen
Oberschlumpf
Hi Theo,

such im inet nach der Datei pdftotext.exe = findest du einzeln und auch in einem Paket von PDF-Tools.

Mit dem Tool pdftotext.exe lese ich aus PDF-Dateien nur alles an Texten aus (bei mir sinds Rezept-Dateien, die sowohl mehrseitig sein können und fast immer auch JPGs enthalten; aber egal, es wird nur der Text ausgelesen)

Die Texte werden einfach "von oben nach unten" in eine Excel-Tabelle eingefügt.
Da ja auch meine Rezepte grundsätzlich gleich aufgebaut sind, ergibt sich beim Auslesen + in Excel einfügen ein Muster.

Dieses "Muster" durchsuche ich per VBA und lass mir nur das, was mich interessiert, in eine andere Excel-Tabelle übertragen - die erste Tabelle kann dann immer gelöscht werden.

Versuch es mal. Das Tool kann in VBA per Kommandozeilen-Parameter sehr gut gesteuert werden = funktioniert bestens!

Hilfts?

Ciao
Thorsten
AW: Daten aus PDF auslesen
Yal
Hallo Theo,

Du hast eine PQ auf eine PDF-Datei eingerichtet, die nur eine Seite beinhaltet.
Herstelle eine zweiten PQ auf eine mehrseitige Datei und schaue dir die Unterschied.

Idealerweise hast Du im Power Query 2 Schleifen: eine für jede Datei in dem Verzeichnis (was Du hier in VBA abdeckt, aber es ist nicht notwendig) und eine für jede Seite in der PDF-Datei.

Ohne mehrseitige PDF-Beispieldatei können wir nur Zuschauer sein.

Zur PQ-Verarbeitung von Dateien aus einem Ordner, siehe Kapitel 5 von https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/

VG
Yal