nachwuchsitler

CSV export von PDF Feldern nach Excel

Hallo Zusammen,

Ich habe eine Frage. Und zwar, müssen aus einem Anmeldeformular mit Feldern die Daten ausgelesen werden und über csv nach Excel importiert werden können.
Die PDF Struktur ist hier. Klick

Ist dies möglich?
Ich habe via Google hier -> Klick bei Ihnen im Forum eine auf Excel 2003 abgestimmte Version gefunden, allerdings funktioniert diese auch nach Anpassung der Abfrage Zeile 15 in Excel 365 nicht mehr.

hat jemand von Ihnen eine Idee, wie ich dies In VBA umsetzen kann?

Vielen Dank und freundliche Grüße,
der NachwuchsITler
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 351677

Url: https://administrator.de/forum/csv-export-von-pdf-feldern-nach-excel-351677.html

Ausgedruckt am: 27.04.2025 um 02:04 Uhr

Volchy
Volchy 13.10.2017 um 09:22:32 Uhr
Goto Top
Hallo NachwuchsITler,

mit Office 365 kann ich das aktuell leider nicht testen.
Ansonsten gäbe es aber noch eine alternative Lösungsmöglichkeit:
- Konvertieren des PDF via PDF-Creator bspw. (Profil hier so einstellen, dass deine Ausgabe eine TXT wird)
Via VBA:
- Import des TXT-Dokuments in ein eigenes Tabellenblatt in Excel
- Durchführung der Bereinigung der eingelesenen Daten: Kopieren der Textpassagen in das/die entsprechenden Tabellenblätter, wie du Sie benötigst.

Codebeispiel Import:
Sub TXTDateienEinlesen()
    
    Dim pfad As String

    pfad = ActiveWorkbook.Path & "\<UNTERVERZEICHNIS-QUELLDOKUMENT(E)>\"   
    x = 2
    d = Dir(pfad & "<DATEINAME>*.txt")  

    Do While d <> ""  
        Open pfad & d For Input As #1
        Do While Not EOF(1)

            Line Input #1, temp
            Worksheets("<TABELLENBLATT FUER IMPORT>").Cells(x, 1) = Replace(temp, vbTab, ";")  
            x = x + 1
        Loop

        Close #1
        d = Dir
    Loop

End Sub

In dem Code zur Bereinigung, kannst du dann alle unnötigen Zeilen bspw. entfernen und je übrig gebliebener Zeile die betreffende/gewünschte Passage mit der Teil-Funktion z.B. auslesen und auf das gewünschtes Tabellenblatt kopieren.
Alles in allem eigentlich eine überschaubare Menge an Code und einfach umzusetzen.

LG
Volchy
134464
134464 13.10.2017 um 10:04:33 Uhr
Goto Top
134464
134464 13.10.2017 aktualisiert um 13:32:22 Uhr
Goto Top
p.s. die speziellen Formularfelder wie Haken und Auswahl-Felder wirst du per pdftotext nicht auslesen können! Diese werden im extrahierten Text nicht sichtbar und somit nicht auswertbar sein. Dafür gibt es spezielle Programme, bzw. du startest eine Auswertung stattdessen per Acrobat-Assistent oder liest per Acrobat die Felder aus oder wertest gleich die Datenbank aus an die die Daten sowieso übermittelt werden! Das Auslesen aus RAW-PDF-Dateien ist gelinde gesagt Bullshit.
colinardo
colinardo 13.10.2017, aktualisiert am 23.06.2023 um 12:34:27 Uhr
Goto Top
Servus,
so wie @kokosnuss sagt sind die Formularfelder bzw. nur die Radios/Checkboxes via pdftotext nicht auslesbar. Wenn du aber den großen Bruder vom Adobe Reader dein eigen nennst (Adobe Acrobat) kann man die Daten über COM-Automation in Excel so einlesen:
Pfad in dem die PDF-Dateien liegen lässt sich in Zeile 3 anpassen (per Default ein Unterordner "PDF" im Ordner in dem das *.xlsm File liegt.

Für deine PDFs die nach deinem verlinkten PDF formatiert sind folgender VBA-Code für Excel.
Sub ImportFormData()
    'Ordner in dem die PDFs liegen  
    folderPDF = ThisDocument.Path & "\pdf"  
    'Acrobat Object erzeugen  
    Set objAcro = CreateObject("AcroExch.App")  
    ' Filesystemobject erzeugen  
    Set fso = CreateObject("Scripting.Filesystemobject")  
    'Ausgaben geschehen auf Arbeitsblatt 1  
    With Sheets(1)
        'estimmte Spalten als Text festlegen  
        .Range("E:E,I:I,J:J,L:L").NumberFormat = "@"  
        ' Alle PDF Dateien des Ordner importieren  
        For Each file In fso.GetFolder(folderPDF).Files
            If LCase(Right(file.Name, 3)) = "pdf" Then  
                'Acrobat Objekte erzeugen  
                Set docAV = CreateObject("AcroExch.AVDoc")  
                Set docPD = CreateObject("AcroExch.PDDoc")  
                'PDF öffnen  
                ret = docAV.Open(file.Path, "")  
                Set docPD = docAV.GetPDDoc()
                Set jsDoc = docPD.GetJSObject
                'Formularfelder auslesen und Variablen zuordnen  
                strVorname = jsDoc.getField("Vorname").Value  
                strNachname = jsDoc.getField("Nachname").Value  
                If LCase(jsDoc.getField("Prof").Value) = "ja" Then  
                    strTitle = "Prof"  
                ElseIf LCase(jsDoc.getField("Dr").Value) = "ja" Then  
                    strTitle = "Dr"  
                Else
                    strTitle = ""  
                End If
                If LCase(jsDoc.getField("Pers").Value) = "ja" Then  
                    strAusweis = "Personalausweis"  
                ElseIf LCase(jsDoc.getField("Rei").Value) = "ja" Then  
                    strAusweis = "Reisepass"  
                Else
                    strAusweis = ""  
                End If
                strAusweisnummer = jsDoc.getField("Nr. Ausweis").Value  
                strAusweisDate = jsDoc.getField("Datum").Value  
                strNationalitaet = jsDoc.getField("Nationalität").Value  
                strGeburtsdatum = jsDoc.getField("Geb. Datum").Value  
                strTelefon = jsDoc.getField("Telefon").Value  
                strMobil = jsDoc.getField("Mobil").Value  
                strEmail = jsDoc.getField("E-Mail").Value  
                strFax = jsDoc.getField("Fax").Value  
                strIHK = jsDoc.getField("IHK").Value  
                strHotel = jsDoc.getField("Hotel").Value  
                strStadtrundfahrt = IIf(LCase(jsDoc.getField("1").Value) = "ja", "JA", "NEIN")  
                strAbendveranstaltung = IIf(LCase(jsDoc.getField("3").Value) = "ja", "JA", "NEIN")  
                strVeranstaltung = IIf(LCase(jsDoc.getField("5").Value) = "ja", "JA", "NEIN")  
                strDatumUnterschrift = jsDoc.getField("Datum 2").Value  
                ' Daten der Formularfelder in die nächste freie Zeile schreiben  
                .Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Resize(1, 18).Value = Array(strVorname, strNachname, strTitle, strAusweis, strAusweisnummer, strAusweisDate, strNationalitaet, strGeburtsdatum, strTelefon, strMobil, strEmail, strFax, strIHK, strHotel, strStadtrundfahrt, strAbendveranstaltung, strVeranstaltung, strDatumUnterschrift)  
                'PDF schließen  
                jsDoc.closeDoc
            End If
        Next
        'Acrobat schließen  
        objAcro.Exit
        'Cleanup  
        Set objAcro = Nothing
        Set jsDoc = Nothing
        Set docAV = Nothing
        Set docPD = Nothing
    End With
    MsgBox "Finished Processing PDFs in: '" & folderPDF & "'"  
End Sub

Grüße Uwe
colinardo
colinardo 16.10.2017 um 16:28:52 Uhr
Goto Top
Keine Rückmeldung?? Wirklich schade ! face-sad
Dann bitte das Gelöst nicht vergessen!