WRITER: Drucken, Ändern Variablen in Schleife

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

M2gul
Beiträge: 2
Registriert: Mo, 15.06.2015 14:18

WRITER: Drucken, Ändern Variablen in Schleife

Beitrag von M2gul »

Hallo liebe Community,

ich bin leider auf eure Hilfe angewiesen.

Ich habe folgendes vor:
Ein mit Variablen gefülltes Dokument möchte ich via Makro drucken. Insoweit, keine Probleme.
Die Variablen sollen nach jedem Druckauftrag automatisch geändert werden, d. h. Dokument fertig -> Druck -> Anpassung der Variablen -> Druck Anpassung der Variablen -> Druck usw.
Allerdings wird bei mir nur die erste und die letzte "Änderung" gedruckt.

Die Änderung der Variablen wird nach und nach vorgenommen. Das funktioniert auch (habe ich anhand von MsgBoxen abgefragt).

So sieht das Ganze aus:

Code: Alles auswählen

Sub AlleDrucken
Textdokument = ThisComponent
   Textfelder = Textdokument.TextFieldMasters
   
   strKonto = "com.sun.star.text.FieldMaster.User.strKonto"
   strTeilnehmer = "com.sun.star.text.FieldMaster.User.strTeilnehmer"
   
   'Teilnehmer 1 drucken
   Textfelder.getByName(strKonto).content = "Test1"
   Textfelder.getByName(strTeilnehmer).content = "1"
      
   Textdokument.textfields.refresh()
   
   call Drucken

'Teilnehmer 2 drucken
   Textfelder.getByName(strKonto).content = "Test2"
   Textfelder.getByName(strTeilnehmer).content = "2"
      
   Textdokument.textfields.refresh()
   
   call Drucken
End Sub

Liegt es möglicherweise doch an dem aufgezeichneten "Druck"-Makro? Das sieht wie folgt aus:

Code: Alles auswählen

sub Drucken
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Printer"
args1(0).Value = "\\XXXXXXX"      'Pfad etc ist im Original vorhanden

dispatcher.executeDispatch(document, ".uno:Printer", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Copies"
args2(0).Value = 1
args2(1).Name = "Collate"
args2(1).Value = true

dispatcher.executeDispatch(document, ".uno:Print", "", 0, args2())

end sub

Hat vielleicht jemand eine Idee worin der Fehler zu suchen ist?

Danke für eure Hilfe
Sascha

Moderation,4: verschoben in MAKROS (und allgem. Programmierung)-Unterbereich, wo alle Makro-Fragen hin gehören; Betreff angepasst; doppeltes Thema im falschen Bereich gelöscht
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Drucken via Marko

Beitrag von Stephan »

Wahrscheinlich braucht der DRucker einen WArtebefehl wie im Folgenden benannt:
http://www.dannenhoefer.de/faqstarbasic ... efhrt.html

dazu müsstest Du Deinen 'Druck-Code' aber auch ähnlich formulieren wie hier:
http://www.dannenhoefer.de/faqstarbasic ... ucken.html

im einfachsten Fall also sowas wie:

Code: Alles auswählen

Dim printProp(0) as New com.sun.star.beans.PropertyValue
printProp(0).Name = "Wait"
printProp(0).Value = "true"
myDoc=ThisComponent
myDoc.Print(printProp())
Gruß
Stephan
M2gul
Beiträge: 2
Registriert: Mo, 15.06.2015 14:18

Re: WRITER: Drucken, Ändern Variablen in Schleife

Beitrag von M2gul »

Hallo Stephan,

dein Hinweis auf den Befehl "wait" hat mich auf die richtige Spur gebracht.

Ich habe ihn allerdings nicht im "Druck-Code" ergänzt sondern ganz einfach nach jeder Änderung der Variablen, also nach dem Druck und vor der nächsten Änderung der Variablen.

Klappt ganz wunderbar. Vielen Dank dafür.

Viele Grüße
Sascha
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: WRITER: Drucken, Ändern Variablen in Schleife

Beitrag von Stephan »

Ich habe ihn allerdings nicht im "Druck-Code" ergänzt sondern ganz einfach nach jeder Änderung der Variablen, also nach dem Druck und vor der nächsten Änderung der Variablen.
das ist aber etwas völlig Anderes.

Der von mir vorgeschlagene Wait-Befehl wartet bis der Drucker den jeweils aktuellen Druckauftrag ausgeführt hat, egal wie lange das dauert.
Der von Dir benannte Wait-Befehl wartet hingegen 'blind' eine festgelegte Zeit, was heißt das man entweder Zeit verschwendet oder Gefahr läuft das es nicht funktioniert.


Gruß
Stephan
Antworten