nachwuchsitler
Goto Top

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

Content-Key: 351677

Url: https://administrator.de/contentid/351677

Printed on: April 23, 2024 at 11:04 o'clock

Member: Volchy
Volchy Oct 13, 2017 at 07:22:32 (UTC)
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
Mitglied: 134464
134464 Oct 13, 2017 at 08:04:33 (UTC)
Goto Top
Mitglied: 134464
134464 Oct 13, 2017 updated at 11:32:22 (UTC)
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.
Member: colinardo
colinardo Oct 13, 2017, updated at Jun 23, 2023 at 10:34:27 (UTC)
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
Member: colinardo
colinardo Oct 16, 2017 at 14:28:52 (UTC)
Goto Top
Keine Rückmeldung?? Wirklich schade ! face-sad
Dann bitte das Gelöst nicht vergessen!