Daten aus PDF auslesen und per VBA in Excel schreiben
Hallo zusammen,
ich bin auf der Suche nach einer möglichen Lösung zum automatisierten Auslesen einer PDF-Datei in eine Excel-Datei auf dieses Forum gestoßen. Dabei habe ich mich bisher v.a. mit dem Austausch und der Lösung in diesem Thread beschäftigt. Da die PDF-Datei auf die sich dort bezogen wird aber leider nicht mehr online ist, fällt es mir schwer das Anliegen des damaligen Thread-Erstellers komplett nachzuvollziehen.
Im ersten Schritt würde mich interessieren, ob es wohl generell eine Möglichkeit gibt, bestimmte Daten automatisiert aus dieser PDF-Datei auszulesen und in eine Excel-Datei zu schreiben.
Daten, die ich gerne jeweils in eine Extra Spalte auslesen möchte sind
Ich hoffe, ich konnte mein Problem/Vorhaben gut genug beschreiben. Bin gespannt, ob es hierfür eine Lösung geben kann oder ob dies aufgrund des Dokument-Aufbaus nicht möglich ist.
Schon mal danke für Eure Mühen, Viele Grüße
Andreas
ich bin auf der Suche nach einer möglichen Lösung zum automatisierten Auslesen einer PDF-Datei in eine Excel-Datei auf dieses Forum gestoßen. Dabei habe ich mich bisher v.a. mit dem Austausch und der Lösung in diesem Thread beschäftigt. Da die PDF-Datei auf die sich dort bezogen wird aber leider nicht mehr online ist, fällt es mir schwer das Anliegen des damaligen Thread-Erstellers komplett nachzuvollziehen.
Im ersten Schritt würde mich interessieren, ob es wohl generell eine Möglichkeit gibt, bestimmte Daten automatisiert aus dieser PDF-Datei auszulesen und in eine Excel-Datei zu schreiben.
Daten, die ich gerne jeweils in eine Extra Spalte auslesen möchte sind
- Name des Arztes
- Fachgebiet
- Straße
- PLZ
- Ort
- Telefonnummer
Ich hoffe, ich konnte mein Problem/Vorhaben gut genug beschreiben. Bin gespannt, ob es hierfür eine Lösung geben kann oder ob dies aufgrund des Dokument-Aufbaus nicht möglich ist.
Schon mal danke für Eure Mühen, Viele Grüße
Andreas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 623065
Url: https://administrator.de/contentid/623065
Ausgedruckt am: 08.11.2024 um 20:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo,
ohne Zusatz-Programme kann wohl nur O365 pro direkt PDF lesen.
Also entweder ein Versuch mit M$ Word oder einem externen Programm zuerst eine Umwandlung in txt
Mit xpdf-tools-win-4.02 konnte ich die PDF in txt wandeln, aber das Format ist etwas ungünstig. Hier im Forum kann ich keine Datei anfügen, bei Bedarf ginge es in http://www.office-loesung.de/p/viewforum.php?f=166
mfg
ohne Zusatz-Programme kann wohl nur O365 pro direkt PDF lesen.
Also entweder ein Versuch mit M$ Word oder einem externen Programm zuerst eine Umwandlung in txt
Mit xpdf-tools-win-4.02 konnte ich die PDF in txt wandeln, aber das Format ist etwas ungünstig. Hier im Forum kann ich keine Datei anfügen, bei Bedarf ginge es in http://www.office-loesung.de/p/viewforum.php?f=166
mfg
Zunächst mal muss sichergestellt sein, dass es sich um native PDF bzw. PDF mit einem (OCR)VT-layer handelt.
Wenn es sich um ein gescanntes PDF ohne Volltext handelt wird das Ganze etwas schwieriger.
Aus einem PDF läßt sich z.B. mit dem kostenlosen pdftk und dem darin entahltenenen Tool 'pdftotext.exe' der Volltext als Textdatei extraieren (https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/).
Die Textdatei kann man dann zeilenweise in vba einlesen und per Regular Expressions lassen sich dann die Werte/Informationen auslesen.
Das Ganze dann in etwas vba-Code und in Excel schreiben und fertig!
Wenn es sich um ein gescanntes PDF ohne Volltext handelt wird das Ganze etwas schwieriger.
Aus einem PDF läßt sich z.B. mit dem kostenlosen pdftk und dem darin entahltenenen Tool 'pdftotext.exe' der Volltext als Textdatei extraieren (https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/).
Die Textdatei kann man dann zeilenweise in vba einlesen und per Regular Expressions lassen sich dann die Werte/Informationen auslesen.
Das Ganze dann in etwas vba-Code und in Excel schreiben und fertig!
Jedoch weiß ich nicht, wie ich hier mit Regular Expressions weiterkommen kann
Regular Expressions TutorialMit Ansatz aus dem o. g. Thread und einem Basis-Regex den du als ersten Anhaltspunkt hernehmen könntest (o. Gewähr auf Vollständigkeit):
Sub PDF2Excel()
Dim i As Integer
Dim strCMDLine As String, strTXT As String
Dim FSO As Object, objSFold As Object, objWks As Object, WSHShell As Object, file As Object, rngLastRow As Range
Dim colPFiles As New Collection, colTFiles As New Collection, regex As Object
' Objects erstellen
Set WSHShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set regex = CreateObject("vbscript.regexp")
' Regex Options
regex.MultiLine = True: regex.Global = True: regex.IgnoreCase = True
Set objSFold = FSO.GetFolder(ThisWorkbook.Path)
strCMDLine = """D:\Download\pdftk\pdftotext.exe"" -raw -nopgbrk "
For Each file In objSFold.Files ' alle Dateien einlesen
If Right(file.Path, 4) = ".pdf" Then colPFiles.Add file.Path ' nur *.pdf
Next
For i = 1 To colPFiles.Count
WSHShell.Run strCMDLine & """" & colPFiles.Item(i) & """", 0, True
Next
For Each file In objSFold.Files ' wieder alles einlesen
If LCase(Right(file.Path, 4)) = ".txt" Then colTFiles.Add file.Path ' nur *.txt
Next
Set objWks = Worksheets(1)
Set rngLastRow = objWks.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
For i = 1 To colTFiles.Count
strTXT = FSO.OpenTextFile(colTFiles.Item(i)).ReadAll
' Ärzte auslesen
regex.Pattern = "(^.+)[\r\n]*((^(Hausarzt|Fachärztin|Facharzt)[\r\n]+)?^(Facharzt|Fachärztin|Hausarzt) .*?)[\s\S]+?^(.*)[\r\n]+^(\d{5}) (.*)[\s\S]*?^Tel\.: (.*)"
Set matches = regex.Execute(strTXT)
If matches.Count > 0 Then
For Each m In matches
rngLastRow.Cells(1, 1).Value = Trim(m.submatches(0)) ' Name des Arztes
rngLastRow.Cells(1, 2).Value = Trim(m.submatches(4)) ' Art des Arztes
rngLastRow.Cells(1, 3).Value = Trim(m.submatches(5)) ' Adresse
rngLastRow.Cells(1, 4).Value = Trim(m.submatches(6)) ' PLZ
rngLastRow.Cells(1, 5).Value = Trim(m.submatches(7)) ' Ort
rngLastRow.Cells(1, 6).Value = Trim(m.submatches(8)) ' Telefonnummer
Set rngLastRow = rngLastRow.Offset(1, 0)
Next
End If
'Textdatei löschen
Kill colTFiles.Item(i)
Next
Set FSO = Nothing
Set regex = Nothing
Set WSHShell = Nothing
Set objSFold = Nothing
End Sub