Druckbereich per Makro

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

Moderator: Moderatoren

Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Druckbereich per Makro

Beitrag von Charly »

Hallo Ninja!

Du schreibst nicht, ob du einen Druckbereich im Calc oder Writer haben willst. Aber nachdem du eine Seite ausdrucken willst, gehe ich eher vom Writer aus. Ich nehme auch an, wenn du 11 eingibst möchtest du die Seite 11 und nicht die Seite 22.

Dein Wunsch ist zumindestens für Writer relativ einfach mit Hilfe des Makrorekorders zu verwirklichen. Für die Eingabe der Seitenzahl brauchst du lediglich eine InputBox-Abfrage. Die Antwort ordnest du dem entsprechenden Argument zu.

Code: Alles auswählen

sub Drucken()

Dim Nr as string

Nr = InputBox("Geben Sie die Druckseite ein")

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(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Copies"
args1(0).Value = 1
args1(1).Name = "RangeText"
args1(1).Value = Nr
args1(2).Name = "Collate"
args1(2).Value = true

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


end sub
Gruß
Charly
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Druckbereich per Makro

Beitrag von Charly »

Hallo Ninja!

Auch für Calc gibt es Druckbereiche. Das Problem ist, eine Zeile hat 256 Spalten. Das heißt, wenn du nur eine Zeile angibst, würdest du eine Menge Papier drucken. Du musst auch Spalten angeben.

Ich habe mir mal vor einiger Zeit einen Codeschnipsel gemacht. Ich weiß nicht ob er noch funktioniert. Ich hatte manchmal Problem mit dem Druckbefehl, wenn das Makro schneller zu Ende war als der Ausdruck. Das sollte mit dem Befehl "wait" eigentlich nicht passieren. Aber dem war nicht so. Ich schreib dir mal den Code auf zum experimentieren:

Code: Alles auswählen


Sub BereichDrucken 
 
dim Bereich 
Dim Args1(0)
Dim Args2(1) as new com.sun.star.beans.PropertyValue
Dim Probs
Dim sDrucker as string

rem ----------------------------------------------------------------------
oDoc   = ThisComponent
oTab = oDoc.sheets(0)
Probs = oDoc.getPrinter()
sDrucker = Probs(0).value

rem ----------------------------------------------------------------------
'Festlegen Bereich 
Bereich = oTab.getCellRangeByPosition(0,4,1,9)

'Druckbereich setzen
args1(0) = Bereich.RangeAddress
oTab.setprintAreas(args1())

args2(0).name = "Name"
args2(0).value = "<" & sDrucker & ">"
args2(1).name = "Wait"
args2(1).value = true

oDoc.print(args2())

'Druckbereich wieder löschen
redim args1()

oTab.setprintAreas(args1())

end Sub

gruß
Charly
Antworten