PDA

View Full Version : Drucken Worddokumenten mit System i



Seiten : [1] 2

jgv
18-10-07, 07:25
Hallo

Ich möchte Worddokumente mit dem System i drucken. Dazu erstelle ich mit Word ein Dokument mit Platzhaltern für die variablen Texte. Dann erstelle ich aus dem System i-DB ein File mit den aktuellen Texten; dieses File wandle ich in ein Excel um.

Ich möchte nun die Serienbrief-Funktion des Winwords verwenden um die Dokumente aus der Vorlage mit den Platzhaltern kombiniert mit den effektiven Daten aus dem Excel zu drucken.

Diese Funktion möchte ich Batch laufen lassen; entweder mit runrmtcmd von einem CL aus oder von der Windows-Büchse gestartet, wobei die System i-Funktionen dann mit rmtcmd aufgerufen werden.

Weiss jemand, ob dies möglich ist und wenn Ja, wies es im Detail ablaufen könnte?

Vielen Dank im Voraus.

Mit besten Grüssen

jgv

Fuerchau
18-10-07, 21:06
Hierfür würde ich über Word direkt eine Abfrage (externe Daten über ODBC) verwenden.
Diese kann Word dann für die Serienbrieffunktion sofort nutzen, da die Felder ja im Dokument direkt angegeben werden.

Dann zeichne ein Makro auf, dass die Abfrage startet und den Seriendruck ausführt.
Dieses Makro musst du dann im Dokument (ThisDocument) der Sub-Prozedur Documen_Open() zuweisen.

Dann kannst du per RMTCMD das Dokument starten, über die Dateiendung findet Windows automatisch Winword.

Allerdings hängt die Automatisierung hier von der Sicherheitsstufe ab, da Abfragen nur nach Rückfrage ausgeführt werden und Makros ggf. gesperrt sind.

Für RMTCMD benötigst du auf dem Windows also einen User mit niedriger Sicherheitsstufe in Word oder du generierst dir ein Zertifikat (Office-Tools->Digitale Signatur für VBA-Projekte), dass du dem Dokument dann zuweisen kannst (Extras->Makros->Sicherheit).

jgv
24-10-07, 08:11
Dieses Makro musst du dann im Dokument (ThisDocument) der Sub-Prozedur Documen_Open() zuweisen.


Vielen Dank für die Hinweise. Wie weise ich ein Makro einer Sub-Prozedur zu?

Fuerchau
24-10-07, 08:55
Die SubProzedur selber ist das Macro.

Geh in den VBA-Editor, öffne im Projektexplorer das Objekt "ThisDocument".
Im Editorfenster wählst du in der linken Dropdown-Liste "Dokument" und in der rechten dann "Open" (falls das nicht automatisch passierte.

VBA generiert automatisch einen Prozedur-Rahmen:

public sub Document_Open()
end sub

In diesen Body kopierst du dann den Inhalt aus dem automatisch generierten Macro, also den Teil zwischen "Public sub Macro1" und "End Sub".

Füge in dein Macro ggf. am Anfang:

on error goto Fehler

und vor "End Sub"

Fehler:

ein.

Damit führen Laufzeitfehler (keine Verbindung o.ä.) nicht zum Hängenbleiben.

jgv
01-11-07, 11:04
Vielen Dank für die Angaben. Es funktioniert jetzt fast ohne Probleme.

Durch Eingabe eines Registry-Eintrages SQLSecurityCheck unter den Word/Options konnte verhindert werden, dass während dem Öffnen eine Frage erscheint, ob man das SQL-Öffnen zulässt.

Jetzt kommt nur noch nach dem Druck aus Word die übliche Frage, ob man das geänderte Dokumente speichern will. Diese Frage ist in unserem Fall nicht nötig, da im Dokument (mit den Platzhaltern) an sich nichts geändert wurde. Besteht eine Möglichkeit, diese Frage zu unterdrücken respektive automatisch mit Nein (oder Ja) zu beantworten?

Besten Dank im Voraus.

jgv

Fuerchau
01-11-07, 11:24
Setze nach dem Druck die Eigenschaft "ThisDocument.Saved=True", dann müsste die Abfrage unterbleiben.

jgv
06-11-07, 10:15
Vielen Dank für den Tip. Mir ist leider noch nicht gelungen herauszufinden, wo die Eingabe gemacht werden muss. Kannst du auch hier einen Hinweis geben?

Besten Dank.

kuempi von stein
06-11-07, 12:27
Hello,



Fehler:
ThisDocument.Saved=True
End Sub


vermute ich mal.

K.

jgv
06-11-07, 16:42
Danke für den Hinweis. Habe ich schon probiert, funktioniert aber leider nicht.

Fuerchau
06-11-07, 22:34
Dann teste mal folgendes:

Private Sub Document_Close()
ThisDocument.Saved=True
End Sub

Bei mir wurde dann selbst ein verändertes Dokument widerspruchslos geschlossen.