Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1968to1972
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

automatisierte Queries abfrage eines PDF Dokuments

automatisierte Queries abfrage eines PDF Dokuments
21.03.2024 09:25:19
laserbrenner
Moin zusammen,

ich habe mal eine Speziellere Frage wo ich nicht so genau weiß wie ich mit meinen VBA Code anfangen soll.

Problemstellung: Ich habe ein automatisiert erstelltes PDF, aus den ich einen Teil auslesen möchte und in VBA weiter verarbeiten möchte.

Zum PDF:
Es hat immer den Selben Aufbau, je nach Dateninhalt ist dieses Dokument mal länger oder kürzer, sprich meine auszulesende Information ist mal auf Seite 7 oder 8.
Das Gute, die PDF hat Kopfzeilen wo immer die gleiche Überschrift drinsteht.

Meine Ideen zur Lösung:
Mit diesen Code:
ActiveWorkbook.Queries.Add Name:= _

"test1 pdf", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Quelle = Pdf.Tables(File.Contents(""filePath""), [Implementation=""1.3""])," & Chr(13) & "" & Chr(10) & " #""Gefilterte Zeilen"" = Table.SelectRows(Quelle, each ([Name] = ""Table015 (Page 7)""))," & Chr(13) & "" & Chr(10) & " #""Erweiterte Data"" = Table.ExpandTableColumn(#""Gefilterte Zeilen"", ""Data"", {""Column1"", ""Column2"", ""Column3"", " & _
"""Column4"", ""Column5"", ""Column6"", ""Column7"", ""Column8"", ""Column9"", ""Column10"", ""Column11"", ""Column12"", ""Column13"", ""Column14"", ""Column15"", ""Column16""}, {""Data.Column1"", ""Data.Column2"", ""Data.Column3"", ""Data.Column4"", ""Data.Column5"", ""Data.Column6"", ""Data.Column7"", ""Data.Column8"", ""Data.Column9"", ""Data.Column10"", ""Data.Co" & _
"lumn11"", ""Data.Column12"", ""Data.Column13"", ""Data.Column14"", ""Data.Column15"", ""Data.Column16""})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Erweiterte Data"""
ActiveWorkbook.Worksheets.Add
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""test pdf"";Extended Propert" _
, "ies="""""), Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array( _
"SELECT * FROM [test pdf]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "test_pdf"
.Refresh BackgroundQuery:=False
End With


erhalte ich die gewünschten Informationen auf einen Tabellen Blatt. In diesen Fall lagen die gewünschten Informationen in der "Table015 auf Page 7"

Ich möchte jetzt versuchen diese Angabe zur Tabelle herauszufinden, um den obenstehenden Abfrage String zu automatisieren.

Sub ReadPDFIntoExcel()

Dim filePath As String
Dim AcroApp As Acrobat.CAcroApp
Dim AcroPDDoc As Acrobat.CAcroPDDoc
Dim AcroAVDoc As Acrobat.CAcroAVDoc
Dim PDDoc As Object
Dim jso As Object
Dim pageNum As Integer
Dim text As String
Dim i As Integer
Dim objIE As Object
Dim objShell As Object

' Pfad zur PDF-Datei auswählen
With Application.FileDialog(msoFileDialogFilePicker)
.Filters.Clear
.Filters.Add "PDF-Dateien", "*.pdf"
.AllowMultiSelect = False
If .Show = -1 Then
filePath = .SelectedItems(1)
Else
MsgBox "Keine Datei ausgewählt."
Exit Sub
End If
End With

' Acrobat-Anwendung initialisieren
Set AcroApp = CreateObject("AcroExch.App")
AcroApp.Hide

' PDF-Dokument öffnen
Set AcroAVDoc = CreateObject("AcroExch.AVDoc")
AcroAVDoc.Open filePath, ""

' Acrobat-JavaScript-Objekt erhalten
Set AcroPDDoc = AcroAVDoc.GetPDDoc
Set jso = AcroPDDoc.GetJSObject

' Anzahl der Seiten im PDF-Dokument erhalten
pageNum = AcroPDDoc.GetNumPages

' Excel-Arbeitsblatt erstellen
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets.Add

' PDF-kopfzeile durchsuchen
For i = 0 To pageNum - 1
text = jso.getpageNthWord(i, 0)
If text = "uberschrift" Then
'Blatt mit uberschrift gefunden
seite = i + 1
End If
Next i
If seite = "" Then
MsgBox "Keine Seite mit uberschrift gefunden"
End If

'hier muss das Wunder Rein ;)

' Ressourcen freigeben
AcroAVDoc.Close False
AcroApp.Exit
Set AcroPDDoc = Nothing
Set AcroAVDoc = Nothing
Set AcroApp = Nothing

MsgBox "PDF erfolgreich in Excel eingefügt."

End Sub



Mit diesen code bekomme ich die angesprochene Überschrift aus den PDF herausgefunden und die dazugehörige Seitenzahl, aber nicht die "Tabelle" von der externen Datenabfrage.
Es gibt doch bestimmt einen VBA weg, um über eine Datenabfrage die Überschrift zu finden und dann die nachfolgende Tabelle in Exel einzulesen.

Könnt Ihr mich hier etwas an die Hand nehmen und auf den richtigen Weg bringen.
Für mich ist die automatische "externe" Datenabfrage doch noch recht neu und unübersichtlich.

vielen Dank und Gruß
Matthias

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: automatisierte Queries abfrage eines PDF Dokuments
21.03.2024 09:40:17
laserbrenner
Ach so,
für andere Wege zum Ziel bin ich natürlich auch offen :)

gruß
AW: automatisierte Queries abfrage eines PDF Dokuments
21.03.2024 11:04:31
Yal
Hallo Matthias,

mit dem erste Teil erzeugst Du eine Power Query Abfrage, die dir den Inhalt der Datei in Excel reinbringt.
Wenn Du diese Query genauer anschaust (Menü "Daten", "Abfragen und Verbindungen", rechts die Query "test1 pdf" rechtsklicken und "Bearbeiten"),
kannst Du zwischen einen Schritt "erste Zeile als Überschriften verwenden" (Menü "Transformieren"). Es ist mir nich klar, ob diese Schritt vor oder nach dem "Gefilterte Zeilen" stattfinden soll (ich nehme an danach).

Somit hättest Du direkt die passenden Überschriften über deinen Spalten uind bräuchtest den zweiten Code gar nicht.

Es gibt auch eine Möglichkeit, Dateien aus einem Verzeichnis mit einer Power Query Abfrage aufzulisten. Dann in einer zusätzliche Spalte einen "x" eingeben und das ganz per zweite PQ-Abfrage filtern und an der "Text1 pdf" übergeben wird. Ist aber leicht Fortgeschrittenen.

Schau dir unbedingt der Forum-Lieblingstuorial an: https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/

VG
Yal
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige