Hallo an Alle,
Besten Dank komma4 für Deine Anregungen. Die Sache mit Writer hab ich ausprobiert, ist zwar bisschen abenteuerlich, aber für den Notfall absolut brauchbar. Mir ist jedoch als ob ich die Sache anders anpacken müsste, da ich heute gelesen hab dass die Programmierung per UNO-Dispatcher Modell zwar bequem, aber unsicher bezüglich zukünftiger Kompatibilität ist.
Das ganze soll folgendermaßen ablaufen: der User wählt in einem Dialog-Listenfeld einen Druckjob aus, welcher eine Anzahl von x Seiten hat (manchmal 2, manchmal bis zu 16). Diese werden dann am Stück (Duplex-Drucker) gedruckt oder in 2 Etappen (manueller Duplex-Druck).
Am liebsten würde ich drucken ohne die entsprechenden Seiten auswählen zu müssen. Folgenden Ansatz hab ich probiert:
Code: Alles auswählen
Sub Drucken
Dim arg(0) as new com.sun.star.beans.PropertyValue
arg(0).name="Pages"
arg(0).value="8-12"
ThisComponent.print(arg())
End Sub
Dies klappt zwar hat aber einen Haken: ich kann nicht sicher sein dass dies die Seiten sind, die ich definiert habe. Falls ein User einen Druckbereich in einer Tabelle hinzufügt (am besten in der allerersten!), verschieben sich alle Seitenzahlen und mein Programm druckt nichts mehr korrekt.
Also will ich von mir definierte benannte Bereiche drucken. Ich muss also den Bereich irgendwie auswählen und die Auswahl drucken. Da dies nicht mit obiger Prozedur möglich ist hab ich mir Folgendes ausgedacht, was auch so funktioniert, bis auf das Geflacker:
Code: Alles auswählen
oDoc=ThisComponent
'Activate the sheet containing the named range
oSheet = oDoc.Sheets.getByName(strSheetName)
oDoc.getCurrentController().setActiveSheet(oSheet)
'Select the named range ...
oRange=oSheet.getCellRangeByName(strRangeName)
oDoc.getCurrentController().Select(oRange)
'...and print it
args2(0).Name = "Copies"
args2(0).Value = bytNumberOfCopies
args2(1).Name = "Selection"
args2(1).Value = true
args2(2).Name = "Collate"
args2(2).Value = false
oDocument = ThisComponent.CurrentController.Frame
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oDispatcher.executeDispatch(oDocument, ".uno:Print", "", 0, args2())
'Undo selection
oRange=oSheet.getCellRangeByName(strDefaultSelect)
oDoc.getCurrentController().Select(oRange)
oSheet = oDoc.Sheets.getByIndex(0)
Wäre es nicht möglich mich auf Seite 1 zu positionieren, die benannten Bereiche anzusprechen, ohne diese physisch auszuwählen und diese 'virtuelle Auswahl' dann zu drucken?
Kann ich eine Auswahl drucken ohne auf das UNO-Dispatcher Modell zurückzugreifen?
Vielen Dank für Eure Mühe!
Jeannot