Seite 1 von 2
Button drucken
Verfasst: Do 4. Dez 2014, 13:27
von Picco
Hallo, suche ein Skript in LO Basic oder Python mit dem ich ein Tabellenblatt per Button drucken kann.
Beispiel aus VBA:
Code: Alles auswählen
Private Sub Etikett_drucken_Click()
Sheets("Etikett drucken").Range("A1:R45").PrintOut
End Sub
Re: Button drucken
Verfasst: Do 4. Dez 2014, 14:25
von karolus
Re: Button drucken
Verfasst: Do 4. Dez 2014, 15:49
von Picco
Danke, aber ich glaube wir reden aneinander vorbei.
Ich suche einen simplen Befehl der (per Button) den Druck einer bestimmten Tabelle auswirft. Das müsste doch einfach in LO Basic machbar sein, oder nicht?
Re: Button drucken
Verfasst: Do 4. Dez 2014, 16:52
von karolus
Re: Button drucken
Verfasst: Do 4. Dez 2014, 17:01
von Picco
Ich schau mal ob ich etwas finde, hab aber schon ein Makro zusammengebastelt. Problem ist nur, Daten werden (augenscheinlich) an den Drucker gesendet, nur dort kommt nichts raus. Weiß nicht warum. Hier soll die zweite Tabelle gedruckt werden.
Code: Alles auswählen
sub Etikett_drucken_Click
dim document as object
document = ThisComponent
DIM PrintProps(0) AS NEW com.sun.star.beans.PropertyValue
PrintProps(0).Name = "Nr"
PrintProps(0).Value = "2"
document.print(PrintProps())
end sub
Re: Button drucken
Verfasst: Do 4. Dez 2014, 17:07
von Picco
Okay, damit scheint es nun zu funktionieren. Danke wieder mal für die Hilfe, kann geschlossen werden!
Code: Alles auswählen
sub A4_drucken
dim printProp() as new com.sun.star.beans.PropertyValue
ocontroller = thiscomponent.currentcontroller
ocurrentsheet = ocontroller.activesheet
osheet = Thiscomponent.sheets.getbyname("A4 drucken")
ocontroller.activesheet = osheet
thiscomponent.print(printProp)
wait 1000
ocontroller.activesheet = ocurrentsheet
end sub
Re: Button drucken
Verfasst: Do 4. Dez 2014, 17:09
von karolus
Hallo
Vielleicht so: ( Tabellenname und Druckbereich aus deinem VBA-beispiel. )
Code: Alles auswählen
from com.sun.star.beans import PropertyValue
def setandprint(*_):
doc = XSCRIPTCONTEXT.getDocument()
sheet = doc.Sheets.getByName("Etikett drucken")
printrange = sheet.getCellRangeByName("A1:R45")
sheet.setPrintAreas((printrange.RangeAddress,))
printprop = PropertyValue()
printprop.Name = 'Wait'
printprop.Value = True
doc.print((printprop,))
Nach Basic musst du dir das selber übersetzen, dafür bin ich nicht qualifiziert
Karolus
Re: Button drucken
Verfasst: Fr 5. Dez 2014, 11:09
von Picco
Okay, damit hab ich nun auch die gewollte Range in meinem Makro. Ein Schritt weiter zu der vollkommenen Lösung.
Nun müsste ich noch einen Weg finden, wie ich die Range (die in einer Zelle der Tabelle steht) auslesen kann, sodass das Makro nur diesen Bereich druckt. Habe der Zelle den Namen "DruckbereichA4" gegeben, aber im Makro nimmt er nicht den Wert der Zelle, sondern den Inhalt an >> printrange = osheet.getcellrangebyname("DruckbereichA4") <<
Damit wird diese Zelle gedruckt (ein Zettel mit den Worten A14:D64 kommt raus), anstatt dass das Makro den Wert heranzieht und den Bereich A14:D64 druckt. Auch wenn ich den Namen als Druckbereich definiere hat es keinen Effekt.
*edit: Zur Erklärung: In der Zelle 'A4 drucken'.AG1 steht der Druckbereich drinnen, der sich automatisch generiert. Zum Beispiel enthält die Zelle den Wert A14:D64 oder A14:D110 oder ähnliches. Auf diesen Inhalt müsste ich im Makro zugreifen können.
Code: Alles auswählen
sub A4_drucken_click
dim printProp() as new com.sun.star.beans.PropertyValue
ocontroller = thiscomponent.currentcontroller
ocurrentsheet = ocontroller.activesheet
osheet = Thiscomponent.sheets.getbyname("A4 drucken")
printrange = osheet.getcellrangebyname("DruckbereichA4")
oCursor = oSheet.createCursorByRange(printrange)
oAdress = oCursor.RangeAddress
Dim aDruckbereich(0)
aDruckbereich(0) = oAdress
osheet.setPrintAreas(aDruckbereich())
ocontroller.activesheet = osheet
thiscomponent.print(printProp)
wait 1000
ocontroller.activesheet = ocurrentsheet
MsgBox("Seiten werden gedruckt.",64,"Etiketten-Tool")
end sub
Re: Button drucken
Verfasst: Fr 5. Dez 2014, 12:55
von karolus
Hallo
Code: Alles auswählen
argcell = osheet.getcellrangebyname("DruckbereichA4")
printrange = osheet.getcellrangebyname( argcell.String )
die Übergabe an
oCursor kannst du dir schenken,
printrange.RangeAddress ist identisch mit
oCursor.RangeAddress.
Re: Button drucken
Verfasst: Fr 5. Dez 2014, 13:05
von Picco
Danke! Das hatte ich vorher so ähnlich schon drinnen, hat aber nicht funktioniert. So wie von dir geschrieben geht's.
Mein Problem mit dem variablen Druckbereich löst das leider nicht. :/