37414
Goto Top

Alle Länder über Dropdownfeld auswählen (PDF-Dokument)

Hallo an Alle,

ich bin mit meinem PDF-Dokument jetzt soweit fertig... auch dank Eurer Hilfe face-wink

Eine Frage stellte sich mir jedoch erst eben, als ich das Dokument mal am PC ausfüllen wollte.
In das Textfeld "Land" muss man händisch sein Land eintragen. Aber dann dachte ich... das sollte doch auch über ein Dropdownfeld möglich sein.

Dazu habe ich mir nun eine Liste aller Länder gesucht und diese als Worddatei abgespeichert.

Natürlich könnte ich jetzt in den Eigenschaften des Dropdownfeldes, im Reiter "Optionen" jedes einzelne Land als Element eintragen und dann zur Elementliste hinzufügen.
Allerdings enthält meine Länderliste mehr als 200 Länder und auf diese Weise wäre es ein sehr hoher Aufwand.

Daher meine Frage:
Gibt es eine einfachere Möglichkeit, diese rund 200 Länder im Dropdownfeld zu hinterlegen, damit man am Ende ein Land über das Dropdownfeld auswählen kann?
Bei meiner Recherche habe ich alles Mögliche gefunden - aber keinen Hinweis darauf, wie man das umsetzt.

Danke und Gruß,
imebro

Content-Key: 466116

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

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

Member: colinardo
colinardo Jun 26, 2019, updated at Jul 01, 2019 at 09:09:37 (UTC)
Goto Top
*.VBS erstellen, Pfad zum PDF und Pfad einer ANSI Textdatei in der die Länder jeweils in separater Zeile untereinander stehen anpassen, Name des Dropdowns anpassen, ausführen, fertig.
PDFFILE = "D:\datei.pdf"  
COUNTRYFILE = "D:\countries.txt"  
DROPDOWNNAME = "dd_countries"  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set objAcro = CreateObject("AcroExch.App")  
Set docAV = CreateObject("AcroExch.AVDoc")  
Set docPD = CreateObject("AcroExch.PDDoc")  
ret = docAV.Open(PDFFILE,"")  
Set docPD = docAV.GetPDDoc()
Set jsDoc = docPD.GetJSObject
objAcro.Show
Set dd = jsDoc.getField(DROPDOWNNAME)
dd.clearItems()
countries = Split(fso.OpenTextFile(COUNTRYFILE,1).ReadAll(),vbNewLine)
dd.setItems(countries)

Set jsDoc = Nothing
Set docAV = Nothing
Set docPD = Nothing
Set fso = Nothing
Ciao.
Mitglied: 37414
37414 Jun 26, 2019 updated at 13:01:09 (UTC)
Goto Top
Vielen Dank für die schnelle Hilfe.

Leider erhalte ich eine Fehlermeldung, wie folgt:

---------------------------
Windows Script Host
---------------------------
Skript:	C:\Users\Name\Desktop\script2.vbs
Zeile:	16
Zeichen:	1
Fehler:	Der Remoteprozeduraufruf ist fehlgeschlagen. 
Code:	800706BE
Quelle: 	(null)

---------------------------
OK   
---------------------------

Die PDF-Datei sowie die TXT-Datei mit allen Ländern befinden sich direkt auf "C:\"
Mit DROPDOWNNAME = "dd_countries" war doch der Name des Dropdownfeldes gemeint, nehme ich an face-smile

Hier mal mein vollständiges Script:

PDFFILE = "C:\Antragsformular.pdf"  
COUNTRYFILE = "C:\Staaten.txt"  
DROPDOWNNAME = "Geburtsland"  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set objAcro = CreateObject("AcroExch.App")  
Set docAV = CreateObject("AcroExch.AVDoc")  
Set docPD = CreateObject("AcroExch.PDDoc")  
ret = docAV.Open(PDFFILE,"")  
Set docPD = docAV.GetPDDoc()
Set jsDoc = docPD.GetJSObject
objAcro.Show
Set dd = jsDoc.getField(DROPDOWNNAME)
dd.clearItems()
countries = Split(fso.OpenTextFile(COUNTRYFILE,1).ReadAll(),vbNewLine)
dd.setItems(countries)

LG
imebro
Member: colinardo
Solution colinardo Jun 26, 2019 updated at 13:02:55 (UTC)
Goto Top
Läuft hier einwandfrei, Debuggen musst du selbst, ansonsten PN = Auftrag.
Ich tippe auf das Encoding der Textdatei...
Mit DROPDOWNNAME = "dd_countries" war doch der Name des Dropdownfeldes gemeint, nehme ich an
Rischtisch.
Mitglied: 37414
37414 Jun 26, 2019 at 13:04:41 (UTC)
Goto Top
OK, ich schaue mir die Textdatei nochmal an.
Ggf. nehme ich mal einen anderen Editor.
Habe den Inhalt nämlich einfach aus einer Worddatei kopiert in die Textdatei und habe das Programm "Notepad++" verwendet.

LG
imebro
Member: colinardo
colinardo Jun 26, 2019 updated at 13:19:08 (UTC)
Goto Top
Habe den Inhalt nämlich einfach aus einer Worddatei kopiert in die Textdatei und habe das Programm "Notepad++" verwendet.
Ohh ja, mach daraus ein simples PlainText ANSI File, UTF & Co muss man anders handeln, geht aber auch problemlos über eine Funktion wenn man das wollte.
Function ReadUTF8(file)
	With CreateObject("ADODB.Stream")  
		.Type = 2 : .Charset = "UTF-8" : .Open : .LoadFromFile(file)  
		ReadUTF8 = .ReadText
		.Close
	End With
End Function

countries = Split(ReadUTF8(COUNTRYFILE),vbNewLine)
Da das hier aber eh nur eine einmalige Sache ist mach es schnell über ein ANSI File...
Mitglied: 37414
37414 Jun 26, 2019 updated at 13:27:52 (UTC)
Goto Top
Yessss, das war´s.
Habe die Textdatei ins ANSI-Format konvertiert.
Damit hat es sofort funktioniert. face-smile

Danke für die Hilfe

Gruß
imebro
Member: colinardo
colinardo Jun 26, 2019 updated at 14:05:42 (UTC)
Goto Top
Na dann mach das Ding hier bitte auch dicht, falls du auf dem Weg mit der Maus nicht vor Schweißausbruch zusammenbrichst face-wink .
Mitglied: 37414
37414 Jun 27, 2019 at 05:23:54 (UTC)
Goto Top
Jaaa, da hast Du den Nagel auf den Kopf getroffen face-wink
War ja echt abartig gestern mit der Hitze.

OK, der Thread ist dann erledigt und ich schließe ihn dann.

Vielen Dank nochmal für Deine Hilfe.

Gruß
imebro
Mitglied: 37414
37414 Jun 27, 2019 updated at 11:58:43 (UTC)
Goto Top
Kann man in Deinem Script eigentlich auch mehrere Dropdownfelder angeben?
Das Geburtsland gibt es nämlich insgesamt 5 Mal mit unterschiedlichen Namen für das Dropdownfeld.

Hier nochmal der aktuelle Code:

PDFFILE = "C:\Users\Name\Desktop\AidA\Antragsformulare\Antragsformular_ausfüllbar_NEU.pdf"  
COUNTRYFILE = "C:\Users\Name\Desktop\AidA\Antragsformulare\Staaten.txt"  
DROPDOWNNAME = "Geburtsland"  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set objAcro = CreateObject("AcroExch.App")  
Set docAV = CreateObject("AcroExch.AVDoc")  
Set docPD = CreateObject("AcroExch.PDDoc")  
ret = docAV.Open(PDFFILE,"")  
Set docPD = docAV.GetPDDoc()
Set jsDoc = docPD.GetJSObject
objAcro.Show
Set dd = jsDoc.getField(DROPDOWNNAME)
dd.clearItems()
countries = Split(fso.OpenTextFile(COUNTRYFILE,1).ReadAll(),vbNewLine)
dd.setItems(countries)

Vielleicht so?

DROPDOWNNAME = "Geburtsland"
DROPDOWNNAME = "Geburtsland_1"
DROPDOWNNAME = "Geburtsland_2"

Oder so?

DROPDOWNNAME = "Geburtsland"; "Geburtsland_1"; "Geburtsland_2"

Gruß
imebro
Member: colinardo
colinardo Jun 27, 2019 updated at 14:10:04 (UTC)
Goto Top
Simples Array und eine Schleife drüber gepappt.
PDFFILE = "C:\Users\Name\Desktop\AidA\Antragsformulare\Antragsformular_ausfüllbar_NEU.pdf"  
COUNTRYFILE = "C:\Users\Name\Desktop\AidA\Antragsformulare\Staaten.txt"  
DROPDOWNNAMES = array("Geburtsland","Geburtsland_2","Geburtsland_3")  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set objAcro = CreateObject("AcroExch.App")  
Set docAV = CreateObject("AcroExch.AVDoc")  
Set docPD = CreateObject("AcroExch.PDDoc")  
ret = docAV.Open(PDFFILE,"")  
Set docPD = docAV.GetPDDoc()
Set jsDoc = docPD.GetJSObject
countries = Split(fso.OpenTextFile(COUNTRYFILE,1).ReadAll(),vbNewLine)
for each ddName in DROPDOWNNAMES
    Set dd = jsDoc.getField(ddName)
    dd.clearItems()
    dd.setItems(countries)
Next
objAcro.Show

Set jsDoc = Nothing
Set docAV = Nothing
Set docPD = Nothing
Set fso = Nothing
https://www.a-coding-project.de/ratgeber/vbscript
Mitglied: 37414
37414 Jun 27, 2019 at 12:35:49 (UTC)
Goto Top
Vielen Dank...

Bringt aber jetzt nen Fehler:

---------------------------
Windows Script Host
---------------------------
Skript:	C:\Users\Name\Desktop\AidA\Antragsformulare\script1.vbs
Zeile:	11
Zeichen:	1
Fehler:	Objekt erforderlich: 'docPD'  
Code:	800A01A8
Quelle: 	Laufzeitfehler in Microsoft VBScript

---------------------------
OK   
---------------------------

Oder sollte ich das ganze besser direkt auf C:\ legen?

Gruß
imebro
Member: colinardo
colinardo Jun 27, 2019 updated at 12:55:25 (UTC)
Goto Top
Der Umlaut im Dateinamen macht die Probleme wenn das File nicht entsprechend kodiert wird.
Mitglied: 37414
37414 Jun 27, 2019 updated at 14:04:20 (UTC)
Goto Top
Ja, das hatte ich auch schon vermutet. Aber das ging auch nicht.
Habe es soeben nochmal getestet.

Auch nur mit "Antragsformular.pdf" ergibt es folgenden Fehlercode:

---------------------------
Windows Script Host
---------------------------
Skript:	C:\Users\Name\Desktop\AidA\Antragsformulare\script1.vbs
Zeile:	16
Zeichen:	5
Fehler:	Der Remoteprozeduraufruf ist fehlgeschlagen. 
Code:	800706BE
Quelle: 	(null)

---------------------------
OK   
---------------------------

Merkwürdig...
Gestern hat es ja genau so funktioniert (allerdings mit dem vorherigen Code mit nur einem Dropdownfeld)

Gruß
imebro
Member: colinardo
colinardo Jun 27, 2019 updated at 14:05:07 (UTC)
Goto Top
Geht hier einwandfrei, vermutlich hast du im Hintergrund in den Prozessen noch einen toten liegen.

Ich bin hier jetzt raus, schon zu viel Zeit für umme vertrödelt.

Ciao.
Mitglied: 37414
37414 Jun 27, 2019 at 14:07:36 (UTC)
Goto Top
OK... versuche es nach einem Neustart nochmal oder ggf. an einem anderen PC.

Danke jedenfalls für Deine Hilfe.

Gruß
imebro
Mitglied: 37414
37414 Jul 01, 2019 at 06:43:13 (UTC)
Goto Top
Guten Morgen...

habe es am Freitag nach einem Neustart und auch heute Morgen nochmal versucht mit dem Script mit mehreren array-Angaben.
Leider erhalte ich auch heute Morgen wieder die gleiche Fehlermeldung wie bereits oben einkopiert.

Seltsam... denn den Tag vorher hatte das Script ja funktioniert... allerdings nur mit einem einzigen Dropdownname.

TEST:
Soeben habe ich das Script dann einfach nochmal zu einem solchen mit nur einem Dropdownname gemacht... aber diesmal habe ich einfach den Namen eines anderen Dropdownfeldes gewählt. Und auch da erhalte ich genau diese Fehlermeldung:

---------------------------
Windows Script Host
---------------------------
Skript:	C:\Users\Name\Desktop\AidA\Antragsformulare\script2.vbs
Zeile:	16
Zeichen:	1
Fehler:	Der Remoteprozeduraufruf ist fehlgeschlagen. 
Code:	800706BE
Quelle: 	(null)

---------------------------
OK   
---------------------------

Ich bin natürlich jetzt auch überfragt.
Wie kann es sein, dass es einmal funktioniert und beim nächsten Mal nicht mehr?
Hast Du - oder sonst Jemand - noch eine Idee?

Danke und Gruß,
imebro
Member: colinardo
colinardo Jul 01, 2019 updated at 10:41:38 (UTC)
Goto Top
So wie ich das hier nachstelle ist das wohl ein Bug der Funktion setItems(), der bei mehrfachen Aufrufen aus VBS Acrobat zum Absturz bringt.

Die Funktion setItems() ist eigentlich die effizientere weil man mit Ihr das Array in einem hinzufügen kann, aber wenn's offensichtlich auf Grund eines Bugs nicht anders geht nutze diese langsamere Variante:
PDFFILE = "C:\Users\Name\Desktop\AidA\Antragsformulare\Antragsformular_ausfüllbar_NEU.pdf"  
COUNTRYFILE = "C:\Users\Name\Desktop\AidA\Antragsformulare\Staaten.txt"  
DROPDOWNNAMES = array("Geburtsland","Geburtsland_2","Geburtsland_3")  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set objAcro = CreateObject("AcroExch.App")  
Set docAV = CreateObject("AcroExch.AVDoc")  
Set docPD = CreateObject("AcroExch.PDDoc")  
ret = docAV.Open(PDFFILE,"")  
Set docPD = docAV.GetPDDoc()
Set jsDoc = docPD.GetJSObject

countries = Split(fso.OpenTextFile(COUNTRYFILE,1).ReadAll(),vbNewLine)
For each ddName In DROPDOWNNAMES
    Set dd = jsDoc.getField(ddName)
    If Not dd Is Nothing Then
	   dd.clearItems()
	   For i = 0 To UBound(countries)
	   	dd.insertItemAt countries(i),countries(i),i
	   Next
    End If
Next
objAcro.Show

Set jsDoc = Nothing
Set docAV = Nothing
Set docPD = Nothing
Set fso = Nothing
Set objAcro = Nothing
So das war's für mich hier jetzt aber endgültig.

Ciao.
Grüße Uwe
Mitglied: 37414
37414 Jul 01, 2019 at 12:26:23 (UTC)
Goto Top
Danke Dir Uwe... hat funktioniert.
Allerdings mußte ich alle 3 Dateien (Script, Staaten, Antragsformular) direkt ins Root eines Laufwerkes legen. Aber dann ging es.

Gruß,
imebro
Member: colinardo
colinardo Jul 01, 2019 updated at 12:36:15 (UTC)
Goto Top
Allerdings mußte ich alle 3 Dateien (Script, Staaten, Antragsformular) direkt ins Root eines Laufwerkes legen.
Quatsch mit Soße, du musst nur die Umlaute entfernen oder das VBS-File mit entsprechendem Encoding speichern, hatten wir schon mal ...
Mitglied: 37414
37414 Jul 01, 2019 at 12:49:12 (UTC)
Goto Top
...die Umlaute hatte ich bereits entfernt und ich habe nachher auf dem anderen Laufwerk genau die gleiche Script-Datei genutzt, wie vorher.
Hmmm... merkwürdig.

Aber ist ja auch egal. Hat ja so funktioniert.

LG
imebro