pizzabrot
Goto Top

Pdf in excel einspielen mit vba und pdftotext

Hallo Zusammen,
das Thema ist hier im forum bereits mehr als 4 jahre alt, aber für mich brand aktuell.
Ich möchte für eine Chemikalienliste aus verschiedenen Sicherheitsdatenblättern jeweils die H-Sätze raussuchen.
Mir diente folgender Beitrag als Inspiration:

PDF auslesen und per VBA in Excel schreiben

Allerdings werden da direkt gezielte Daten ausgelesen und niedergschrieben.

Durch die Art und Weise von Sicherheitsdatenblättern stehen die H-Sätze aber nie an der selben Stelle und es gibt erst recht kein Schlüsselwort, nach dem die Stehen würden.

Mir würde es also reichen eine Stabile Lösung zu haben, das .txt file zu erzeugen und dieses dann in A1 meines Tabellenblattes zu kopieren.

ich kann das ganze naürlich auch per Hand machen aber per VBA und einem CommandButton ist das natürlich komfortabler.

Mein bisheriger Ansatz sah eigentlich folgender Maßen aus


 Sub CommandButton1_Click()
    Dim RetVal
        RetVal = Shell("C:\Users\Pizzabrot\Desktop\Neuer Ordner\pdftotext.exe sdb.pdf", 1)      'Erzeugt die .txt File  
        
        Application.Wait (Now + TimeValue("0:00:05"))                                       'Fügte eine Wartezeit hinzu, damit das .txt File sicher erstellt wird  
        

    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Users\Pizzabrot\Desktop\Neuer Ordner\SDB.txt", _  
        Destination:=Range("$A$1"))  
        .Name = "SDB_1"                                                                     'Wurd per Makroaufnahme erstellt, um das .txt File einzulesen und bei A1 einzufügen  
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub


Das hat soweit gestern auch alles wunderbar funktioniert. Heute allerdings nicht mehr und ich habe keine Ahnung wodran das liegt.

Ich bin in VBA auch noch ein ziemlicher Neuling und der Code hier ist das komplexeste was ich bisher erstellt habe.

Aber ich denke mir, so schwer kann das doch gar nicht, sein diesen CMD befehl auszuführen ohne direkt auf eine .bat zugreifen zu müssen.

Die PDF hier bei mir bisher immer SDB.pdf, was auch ausreicht. Schöner wärs natürlich wenn die einzelne PDF, mit beliebigem Namen, die in dem Ordner liegt, genommen und konvertiert werden würde.

Über Hilfe und Anregungen würde ich mich sehr freuen.

mfg
PB

Content-Key: 493324

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

Printed on: April 19, 2024 at 15:04 o'clock

Member: Bitboy
Bitboy Sep 10, 2019 at 11:58:02 (UTC)
Goto Top
Hi,

was hat sich denn seit gestern geändert, dass es nicht mehr funktioniert?
Kannst du sagen an welcher Stelle es abbricht? Also wird die Datei noch erstellt oder schon nicht mehr?

Grüße
Member: Pizzabrot
Pizzabrot Sep 10, 2019 updated at 12:02:37 (UTC)
Goto Top
Hey Bitboy,
Die Datei wird gar nicht mehr erstellt.
Das einzige was ich geändert habe seit gestern, ist die Tatsache, das ich den PC aus und an gemacht habe.

/edit wenn ich in dem Ordner eine CMD starte und den Befehl pdftotext sdb.pdf eingebe wird die Datei wie gewollt erzeugt.

mfg
PB
Member: Bitboy
Bitboy Sep 10, 2019 at 12:57:29 (UTC)
Goto Top
Hi,
So ausm Bauch raus kannst du dir mal ansehen was denn "Retval" für einen Wert hat, eventuell hilft der Exit code ja weiter.
https://www.xpdfreader.com/pdftotext-man.html

Was eventuell auch sein kann ist, das der Shellaufruf den Parameter nicht mag (dann wärs seltsam, dass es gestern funktioniert hat).
https://stackoverflow.com/questions/20917355/how-do-you-run-a-exe-with-p ...

Grüße
Member: Pizzabrot
Pizzabrot Sep 11, 2019 updated at 12:27:11 (UTC)
Goto Top
wenn ich mir mit debug.print RetVal nach dem Wait ausgeben lasse kommt eine zufällige Vierstellige Zahl bei raus.

Was ich gerade noch probiert habe:
CMD.exe aus system32 in den Ordner kopieren und starten --> befehl pdftotext.exe sdb.pdf --> erfolgreich
Starten eben jener cmd.exe mittels: RetVal = Shell("C:\Users\Pizzabrot\Desktop\Neuer Ordner\cmd.exe pdftotext.exe sdb.pdf", 1) --> kein erfolg. weil die CMD aus unerfindlichen Gründen den Pfad nach C:\Users\Pizzabrot\Documents drin hat und den Befehl pdftotext.exe sdb.pdf gar nicht weitergibt

edit1: die pdftotext.exe mit Boppelklick zu starten funktioniert übrigens nicht, dass muss immer über CMD laufen
edit2: der Befehl "pdftotext.exe sdb.pdf" über eine .bat ausgeführt erzeugt wie gewünscht das .txt file
edit3: eben jene .bat über VBA gestartet verweist wieder auf Documents und kann pdftotext.exe nicht finden

mfg
PB