Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Excel Zeilen in ausfüllbares PDF übertragen
#1
Hallo zusammen,

zur Situation:

Ich habe ein ausfüllbares PDF Dokument, in das ich die gleichen Daten eintragen muss, wie zuvor auch in meine Exceltabelle. Nun habe ich die Überlegung einen Button o.Ä. in Excel einzufügen, sodass die Daten aus dieser jeweiligen angezeigten Zeile (über Filter) direkt in das ausfüllbare PDF-Dokument übernommen werden. So würde ich mir jedes mal die doppelte Schreibarbeit sparen.
Geht so etwas überhaupt?

Vielen Dank im Voraus schon einmal und viele Grüße

Steffen
Antworten Top
#2
Hallo Steffen,

möglich ist viel, aber nicht alles ist sinnvoll, geht nicht ohne Risiko und ist nur mit einigem Aufwand umzusetzen.

Die einfache Seite der Aufgabe ist, in Excel etwas zu kopieren.

Dann muss die pdf-Anwendung in den Vordergrund gebracht werden und mit SendKeys muss man versuchen, das richtige Feld zu treffen, dann das Menü der pdf-Anwendung aufrufen und den Menüeintrag "Einfügen" auswählen, sofern es den im Formular gibt. Für beides muss ein Softkey vorhanden sein, sonst geht es nicht ... Dann braucht man günstigerweise eine identische Softwareausstattung auf dem Entwicklungsrechner, gleiche Einstellungen des Readers, und etwas Zeit, bis die Sache mit den SendKeys funktioniert und vor allem die Einträge auch an der richtigen Stelle sitzen. Allerdings mit dem Risiko, wenn sich am Formular, auf dem Anwendungsrechner oder bei den Einstellungen was ändert, das es wieder nicht geht ...

Also, nach dem "einfachen" Kopieren ist es wohl einfacher und sicherer, die Daten dann auch per STRG+v einzufügen (und nicht doppelt zu schreiben) ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
Hallo André,

es geht wahrscheinlich immer noch um das hier.

Gruß Uwe
Antworten Top
#4
Hallo Uwe,

danke für den Hinweis. Mit dem Adobe Acrobat lässt sich dann die Datenübergabe wohl ohne SendKeys programmieren. Allerdings beißen sich im Beitrag #3 die beiden Sätze:

"Ich hatte es schon soweit, dass ich bestimmte Spalten-Werte übertragen konnte"
...
"Wenn ich es starte, öffnet sich auch die PDF, allerdings ohne eingetragenen Werte. "

Im dort geposteten Code kann ich keine Übertragung feststellen. Wäre schön, wenn man den Code hätte, wo die Übertragung bestimmter Spaltenwerte gelungen ist. Ich hätte auch erst mal nichts anderes vorgeschlagen als Du. Da ich aber keinen AdobeAcrobat habe, muss ich mich auch mehr oder weniger zurückhalten.

Eins hätt' ich noch. Eventuell hilft
statt
fieldObj = rngZ.Cells(4).Value
dann
fieldObj.Value = rngZ.Cells(4).Value
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#5
Hallo André,

Du sagst es. Ich kam mir schon bisschen veralbert vor. Und den AdobeAcrobat hab ich auch nicht.

Gruß Uwe
Antworten Top
#6
Hallo André,

auch dir herzlichen Dank fürs antworten!

Also der Code, der bei mir einzelne Zellen in das ausfüllbare PDF einträgt lautet so:

Zitat:Sub test1()
Dim pdfPath As String
Dim TestVal As String
'Dim pdDoc As Acrobat.CAcroPDDoc
'Dim avDoc As Acrobat.CAcroAVDoc
'Dim acroApp As Acrobat.CAcroApp
Dim pdDoc As Object
Dim avDoc As Object
Dim acroApp As Object
Dim jsObj As Object
Dim fieldObj As Object

' hier liegt die Test Datei
pdfPath = "C:\file\.pdf"
Set acroApp = CreateObject("AcroExch.App")
Set avDoc = CreateObject("AcroExch.avDoc")
acroApp.Show
' doc öffnen
If avDoc.Open(pdfPath, "Name_Dokument") Then
Set pdDoc = avDoc.GetPDDoc()
Set jsObj = pdDoc.GetJSObject()
' Zugriff auf das Feld
Set fieldObj = jsObj.getField("PDF_Feld")
' ... und wert setzen
TestVal = Worksheets("Tabelle1").Range("A2").Value
fieldObj.Value = TestVal
' aufräumen
Set fieldObj = Nothing
Set pdDoc = Nothing
End If
Set avDoc = Nothing
Set acroApp = Nothing
End Sub

Ich habe die PDF-Felder mit Adobe Acrobat benannt, sodass ich weiß, wie ich welches Feld anzusprechen habe. 
Wenn ich nun aber hinter '...und wert setzen die varianten eingebe, die gefilterten Spaltenwerte zu übertragen, öffnet sich ausschließlich die PDF nach dem Buttondruck, aber ohne ausgefülltes Feld.


Viele Grüße

Steffen
Antworten Top
#7
Hallo Steffen,

wie gesagt, ich hab keinen AdobeAcrobat Sad
Wie ist denn der genaue Ablauf? Ist denn am Ende des Makros überhaupt noch ein pdf offen? Ich wäre jetzt erst mal der Ansicht, dass da nix von pdf offen sein dürfte. Ich sehe im Code aber auch nicht, wie die Änderung gespeichert wird.

Im Prinzip
PDDoc.Save Parameter, Pfad & DateiName

Für die möglichen Parameter hab ich irgendwo das gefunden. Du kannst im Programm den benötigten Parameter-Ausdruck oder die Zahl verwenden - das Ganze ENUM... muss nicht sein.

Code:
'Constants for PDDoc save flags.
Public Enum PDSaveFlags
  'Write changes only.
  PDSaveIncremental = 0  '&H0
  'Write the entire file.
  PDSaveFull = 1  '&H1
  'Write a copy of the file into the file.
  PDSaveCopy = 2  '&H2
  'Save the file in a linearized fashion.
  PDSaveLinearized = 4  '&H4
  'Writes a PostScript header as part of the saved file.
  PDSaveWithPSHeader = 8  '&H8
  'Specifies that it's OK to store in binary file.
  PDSaveBinaryOK = 16  '&H10
  'Remove unreferenced objects, often reducing file size.
  PDSaveCollectGarbage = 32  '&H20
End Enum

Wenn Du die Zahlen als Parameter nimmst, kannst Du sie einzeln verwenden oder auch kombinieren.
Ich denke, für Deine Ausgabe könnte einer der ersten 3 Parameter passen, es reicht also z.B.

PDDoc.Save PDSaveCopy, "C:\file\ausgefüllt.pdf"
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#8
Danke für die Antwort :)

also momentan ist es so, dass das PDF einfach auf bleibt nachdem ich den Button gedrückt habe. Die Daten sind auch eingetragen, jedenfalls dann, wenn ich es so mache, wie im letzten Post geschrieben. So wie du schreibst, würde sie ja direkt gespeichert werden. Bei mir ist sie offen, und wenn ich sie schließe kommt die Frage, ob ich speichern will.
Antworten Top
#9
Hallo Steffen,

da könntest Du mal folgendes versuchen:
'gleich nach dem Speichern
pdDoc.Close
avdDoc.Close (True)
acroApp.Exit
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#10
Hi, danke noch einmal für deine Antwort.

Also beim Speichern habe ich ja momentan keine Probleme, eher bei der Übertragung der Zellenwerte einer gefilterten Zeile.
Da ich erst heute wieder bei der Arbeit war, konnte ich gerade eben noch einmal nachsehen, wie weit der Code mittlerweile war:

Zitat:Sub test_pdf()
    Dim pdfPath As String
    Dim TestVal As String
    Dim oWs As Worksheet
    Dim rngF As Range, rngZ As Range
    'Dim pdDoc As Acrobat.CAcroPDDoc
    'Dim avDoc As Acrobat.CAcroAVDoc
    'Dim acroApp As Acrobat.CAcroApp
    Dim pdDoc As Object
    Dim avDoc As Object
    Dim acroApp As Object
    Dim jsObj As Object
    Dim fieldObj As Object
    
    ' hier liegt die Test Datei
    pdfPath = "C:\Users\test.pdf"
    Set acroApp = CreateObject("AcroExch.App")
    Set avDoc = CreateObject("AcroExch.avDoc")
    acroApp.Show
    ' doc öffnen
    If avDoc.Open(pdfPath, "PDF_erstellen") Then
        Set pdDoc = avDoc.GetPDDoc()
        Set jsObj = pdDoc.GetJSObject()
        ' Zugriff auf das Feld
        Set fieldObj = jsObj.getField("PDF-Zelle")
        ' ... und wert setzen
        Set oWs = Worksheets("Tabelle1")
        If oWs.AutoFilterMode Then
        Set rngF = oWs.AutoFilter.Range
        With rngF.SpecialCells(xlCellTypeVisible)
        If .Rows.Count > 1 Or .Areas.Count > 1 Then
       Set rngZ = rngF.Resize(rngF.Rows.Count - 1).Offset(1)
       Set rngZ = rngZ.SpecialCells(xlCellTypeVisible).Rows(1)
       fieldObj = rngZ.Cells(1).Value
           End If
   End With
 End If
        ' aufräumen
        Set fieldObj = Nothing
        Set pdDoc = Nothing
    End If
    Set avDoc = Nothing
    Set acroApp = Nothing
End Sub
momentan ist es so, dass er die Zeile: 
fieldObj = rngZ.Cells(1).Value debuggen will, auch, wenn ich die Zeile so umformuliere, wie du es vorgeschlagen hast, also :
fieldObj.Value = rngZ.Cells(1).Value

Seltsam ist allerdings, dass wenn ich meinen Button zur Erstellung der PDF drücke, die gewünschte PDF geöffnet wird, mir aber von Excel im gleichen Atemzug gesagt wird, dass diese Zeile fehlerhaft ist.
Nur leider wird die PDF dann dementsprechend ohne die gewünschten, gefilterten Werte eingetragen. 
Also, falls du/ ihr noch mehr Tipps habt, immer gerne her damit, ich bin froh über sämtliche Unterstützung.


Liebe Grüße

Steffen
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste