juweee
Goto Top

VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen

Hallo,
ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle gleich (da Klientenbezogen), unterscheiden sich nur inhaltlich.
Um den Kollegen morgens zu ersparen alle Dateien einzeln zu öffnen, würde ich das gerne mit einem Script erledigen. Als Standard ist der Acrobat-Reader DC installiert.
Kann mir da jemand auf die Sprünge helfen oder hat vielleicht auch eine andere Idee?
Ich dachte vor geraumer Zeit auch schon mal an eine Art "Verwaltungsoberfläche" in VB die mir in einem linken Fenster die verfügbaren PDF-Dateien anzeigt (als Links o.ä.), im rechten Fenster den Inhalt des Formulars.
Da es sich dabei jedoch um dyn. XML-Formulare handelt befürchte ich, daß das wohl so nicht funktioniert - zumindest spuckte Google mir keinen Ansatz aus, der in diese Richtung geht. Oder geht's vielleicht doch? ;)
Daher nun die Idee mit dem VBS, das auf einem Schlag alle Dateien öffnen soll.

Lieben Dank im Voraus für eure Ideen,
Juweee

Content-ID: 361748

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

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

emeriks
emeriks 19.01.2018 aktualisiert um 23:48:09 Uhr
Goto Top
Hi,
Batch-File mit ...?
for /f %%d in ('dir /b c:\Ordner\*.pdf') do start c:\Ordner\%%d  

E.
Pjordorf
Pjordorf 20.01.2018 aktualisiert um 01:46:34 Uhr
Goto Top
Hallo,

Zitat von @Juweee:
ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt).
Liquid Crystal Display?

würde ich das gerne mit einem Script erledigen.
Siehe angebot von @emeriks

Als Standard ist der Acrobat-Reader DC installiert.
Wenn der im System hinterlegt ist um PDFs zu Öffnen...

Da es sich dabei jedoch um dyn. XML-Formulare handelt befürchte ich, daß das wohl so nicht funktioniert
Ohne das du zu deinen dyn. nichts weiter zu sagen hast... und auch zu deinen XML die eigentlich ein PDF sein sollen...

Gruß,
Peter
Juweee
Juweee 20.01.2018 aktualisiert um 08:46:57 Uhr
Goto Top
Hallo emeriks, hallo Peter,

erstmal lieben Dank fürs Kümmern und "Nachfragen".
Wie würde die Batch als VBS aussehen?

LCD steht für Adobe Lifecycle Designer. Ich arbeite mit der Version ES2 und erstelle hiermit dyn. PDF-Formulare.
Nähere Infos gibts z.B. hier: Adobe LCD


XML-Formulare ist an der Stelle etwas irreführend gewesen, da das ganze zwar XML als In- und Output verarbeiten kann und es im LCD das Layout auch als XML angeschaut werden kann, letztlich bleibt es doch ein PDF mit ner Menge JavaScript.
Im Gegensatz zu statische PDF-Formular können dyn. z.B. nicht mit Internet-Explorer, Chrome usw. angezeigt werden, sondern ausschließlich mit dem Acrobat Reader, was m.W. auch was mit der Ansteuerung der API im dahinterliegenden JS zu tun hat.
An der Stelle hab ich mir zugegeben selbst ein Ei ins Nest gelegt, da auch Tablets und Smartphone (Android wie IOS) augeschlossen sind - Der Reader als App ist da wohl abgespeckt.
Normale statische PDF in VB anzuzeigen (geht auch unter VBA) hab ich schon mal umgesetzt, das funktioniert auch.
Für dyn. seh ich aus den o.g. Gründen eher schwarz, weil die "Dynamik" nicht verarbeitet werden kann.

Grüße und ein schönes WE, Juweee
135185
Lösung 135185 20.01.2018 aktualisiert um 12:22:57 Uhr
Goto Top
Wie würde die Batch als VBS aussehen?
dim fso,shell,file
Set fso = CreateObject("Scripting.FileSystemObject")  
Set shell = CreateObject("Wscript.Shell")  
for each file in fso.GetFolder("c:\Ordner").Files  
     if LCase(fso.GetExtensionName(file.Name)) = "pdf" then  
         shell.Run """" & file.Path & """",1,False  
     End if
Next
Gruß Sepp
Juweee
Juweee 20.01.2018 um 12:12:48 Uhr
Goto Top
Hallo Sepp,

Danke für deine Mühe.
Das scheint mir schon mal in die richtige Richtung zu gehen, jedoch meckert er Zeile 6 an, da angeblich keine Dateien vorhaben sind.

Gruß, Juweee
135185
Lösung 135185 20.01.2018 aktualisiert um 12:25:03 Uhr
Goto Top
Zitat von @Juweee:
Das scheint mir schon mal in die richtige Richtung zu gehen, jedoch meckert er Zeile 6 an, da angeblich keine Dateien vorhaben sind.
Geht hier mit installiertem Acrobat(Pro/DC) einwandfrei. Für Dateien mit Leerzeichen im Pfad habe ich es oben noch mal minimal angepasst, vielleicht war das bei dir das Problem.
Juweee
Juweee 20.01.2018 um 12:58:27 Uhr
Goto Top
Hallo Sepp,
Super, das funktioniert face-smile
Eine Frage hätte ich noch: Gibt es eine Möglichkeit, daß jeweils der jüngste Ordner genommen wird, damit ich das Script nicht jeden Monat anpassen muss?
Meine Ordnerstruktur folgt z.B. ".\Tagesberichte\01.18". Am 01.02. wird automatisch unterhalb von Tagesberichte der Ordner 02.18 angelegt, zum 01.03. der Ordner 03.18 usw.

Gruß und Danke nochmals, Juweee
135185
Lösung 135185 20.01.2018 aktualisiert um 13:29:00 Uhr
Goto Top
Zitat von @Juweee:

Hallo Sepp,
Super, das funktioniert face-smile
Eine Frage hätte ich noch: Gibt es eine Möglichkeit, daß jeweils der jüngste Ordner genommen wird, damit ich das Script nicht jeden Monat anpassen muss?
Meine Ordnerstruktur folgt z.B. ".\Tagesberichte\01.18". Am 01.02. wird automatisch unterhalb von Tagesberichte der Ordner 02.18 angelegt, zum 01.03. der Ordner 03.18 usw.
Auch kein Beinbruch ...
dim fso,shell,file,folder
Const ROOTFOLDER = "C:\Tagesberichte"  
Set fso = CreateObject("Scripting.FileSystemObject")  
Set shell = CreateObject("Wscript.Shell")  
folder = getNewestFolder(ROOTFOLDER)
If folder <> "" Then  
	For Each file In fso.GetFolder(folder).Files
	     If LCase(fso.GetExtensionName(file.Name)) = "pdf" then  
	         shell.Run """" & file.Path & """",1,False  
	     End if
	Next
End If

Function getNewestFolder(strPath)
        dim objList, f
	Set objList = CreateObject("ADOR.Recordset")  
	objList.Fields.Append "name", 200, 255  
	objList.Fields.Append "date", 7  
	objList.Open
	If fso.FolderExists(strPath) then
		For Each f In fso.GetFolder(strPath).SubFolders
			objList.AddNew
			objList("name").Value = f.Path  
			objList("date").Value = f.DateCreated  
			objList.Update
		Next
	End If
	objList.Sort = "date DESC"  
	If objList.RecordCount > 0 Then
		objList.MoveFirst
		getNewestFolder = objList.Fields("name").Value  
	Else
		getNewestFolder = ""  
	End If
	Set objList = Nothing
End Function
Juweee
Juweee 20.01.2018 um 20:38:51 Uhr
Goto Top
Funktioniert Super, Danke face-smile
Juweee
Juweee 23.01.2018 um 08:57:06 Uhr
Goto Top
Moin zusammen face-smile
Eine "Kleinigkeit" hätte ich doch noch ;)

Um noch etwas mehr Flexibilität hinzuzufügen versuchte ich gestern an die Stelle bei an der der Username steht, diesen auch reinzubekommen und verrsuchte es derart:

dim fso,shell,file,folder,Username
Set fso = CreateObject("Scripting.FileSystemObject")  
Set shell = CreateObject("Wscript.Shell")  
Username = WshShell.ExpandEnvironmentStrings("%UserName%")  
Const ROOTFOLDER = "C:\Users\" & Username & "\Dropbox\FP\Tagesberichte"  
folder = getNewestFolder(ROOTFOLDER)
...

Leider meckert das System nun die Zeile 5 an und ich versteh nicht so recht warum!?
Wie muß ich den Code anpassen, damit ich den Benutzer da rein bekomm?

Grüße, Juweee
135185
135185 23.01.2018 aktualisiert um 10:17:19 Uhr
Goto Top
Du verwendest Const also eine Konstante und die darf niemals dynamischen Inhalt, also aus anderen Variablen zusammengebaut sein, also entferne das Const dann klappt das auch.
Btw. solltest du stattdessen besser die Umgebungsvariable USERPROFILE verwenden, denn der Profilordner ist nicht immer gleich dem Usernamen und die Profile müssen auch nicht immer unter C:\Users liegen!
profile = shell.ExpandEnvironmentStrings("%USERPROFILE%")  
ROOTFOLDER = profile & "\Dropbox\FP\Tagesberichte"  
Juweee
Juweee 23.01.2018 um 10:15:24 Uhr
Goto Top
Moin Sepp,

danke für deine Lösung face-smile
Beim stöbern und probieren gestern Abend dachte ich mir schon, daß da was am Const nicht passt.
Nach dem ich das rausgenommen hab kam ich jedoch auch auf die gleiche Fehlermeldung (in Zeile 4), die ich nun auch mit deinem Vorschlag erhalten habe: "Laufzeitfehler in Microsoft VBScript (4, 1) : Objekt erforderlich: 'WshShell'".
Das Objekt ist doch in der Zeile 3 mit Set shell = CreateObject("Wscript.Shell") angelegt, oder?

Gruß, Uwe
135185
Lösung 135185 23.01.2018 aktualisiert um 10:18:09 Uhr
Goto Top
Natürlich musst du shell statt wshshell verwenden denn mit dem Namen ist das Object ja deklariert, hatte ich übersehen, ist korrigiert!
Juweee
Juweee 23.01.2018 um 10:35:32 Uhr
Goto Top
Danke, so passt das face-smile
Gruß, Uwe