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
Hallo

Ok, dann helfe ich dir bei der Suche:
http://www.de.openoffice.info/search.ph ... bmit=Suche

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. :/