Seite 1 von 1

Druckbefehl für Dokument in Makro

Verfasst: Di, 04.04.2006 10:41
von sascha11
hey!

gibt es für ein Dokument eine Printfunktion (Makro), z. Bsp.:
Dim oT1 as Objec
oT1=myDoc.sheets(1)
->>> oT1.print()

Danke,

Sascha

Verfasst: Di, 04.04.2006 12:16
von Toxitom
Hey Sascha,
gibt es für ein Dokument eine Printfunktion
Ja, aber nicht für eine Tabelle:

Code: Alles auswählen

oDoc.print()
funktioniert ähnlich, wie wenn du den "Druck-Button" in der Standard-Iconliste betätigst.

Also: Bie Calcdokumenten bedeutet das, du musst vorher Druckbereiche einrichten, willst du nicht alles gedruckt haben. Und natürlich kann man das alles per Makro machen :D

Gruss
Thomas

wie richte ich die Druckbereiche ein

Verfasst: Di, 04.04.2006 12:23
von sascha11
wenn ich jetzt Tabelle 3 und 4 drucken möchte, wie kann ich in diesem Beispiel den Druckbereich wählen? muss ich den an eine andere Funktion übergeben? gibt es eine Dokumentation dazu?

Verfasst: Di, 04.04.2006 12:44
von Toxitom
Hey Sascha,
gibt es eine Dokumentation dazu?
Sicher. Alle Tabellenblätter unterstützen das Interface com.sun.star.sheet.XPrintAreas , und das findest du beschrieben in der Dokumentation (IDL online oder auch lokal im SDK).
Dort findest du dann Methoden wie getPrintAreas() oder auch setPrintAreas(aListe), wobei du mit letztgenannter die Druckbereiche für Tabellenblätter setzt. Wichtig dabei: Der übergebene Array überschreibt immer alle alten Druckbereiche - also vorher auslesen, und den Array erweitern!

In Kurzform:

Code: Alles auswählen

Dim aDruckbereiche(0)
oDruckbereich1 = oSheet.getCellRangeByName("a1:n50").rangeAddress
aDruckbereiche(0) = oDruckbereich1
oSheet.setPrintAreas(aDruckbereiche())
Gruss
Thomas

Verfasst: Mi, 05.04.2006 10:15
von sascha11
Hey!

danke für deine Antwort- ich erhalte, wenn ich diesen Code nehme, danna ber die Fehlermeldung "Arguments len differ!"

[code]
Dim aDruckbereiche(0)
oDruckbereich1 = oT3.getCellRangeByName("a1:n50").rangeAddress
aDruckbereiche(0) = oDruckbereich1
oT3.setPrintAreas(aDruckbereiche())
myDoc.print()
[/code]

myDoc ist so definiert:
[code]
Dim myDoc as Object
myDoc= ThisComponent
[/code]

Wie drucke ich jetzt Tabellenblatt 3?

danke,

Sascha

bei google gefunden

Verfasst: Mi, 05.04.2006 14:02
von sascha11
hi!

habe dieses Script bei google gefunden, wenn ich es aufrufe, crashed allerdings mein Programm ohne Fehlermeldung (nicht mehr ansprechbar).
[code]
Sub Druckbereich_Ein (sSht$, nStC&, nStR&, nEndC&, nEndR&)

'------------------------------------------------------------------

Dim selArea(0) as new com.sun.star.table.CellRangeAddress

Dim oDoc as object

Dim oSheet as object

Dim oSheets

Dim i%

oDoc = Thiscomponent

oSheets = ThisComponent.Sheets

oSheet = ThisComponent.currentSelection.getSpreadsheet()

oSheet.setPrintareas(array())



selArea(0).StartColumn = 1

selArea(0).StartRow = 0

selArea(0).EndColumn = 12

selArea(0).EndRow = 46

oSheet=ThisComponent.currentSelection.getSpreadsheet()

oSheet.setPrintareas(selArea())

oDoc.Print(Array())

End Sub
[/code]

so erhalte ich eine andere Fehlermeldung

Verfasst: Mi, 05.04.2006 14:23
von sascha11
hey!

mit diesem Code erhalte ich die Fehlermeldung
"sequence element is not assignable by given value"
[code]
Dim oDoc as Object
oDoc= ThisComponent
Dim aDruckbereiche(0)
oDruckbereich1 = oT3.getCellRangeByName("a1:n30").rangeAddress
aDruckbereiche(0) = oDruckbereich1
oT3.setPrintAreas(aDruckbereiche())
oDoc.print(aDruckbereiche())
[/code]

Danke!

Sascha

Verfasst: Do, 06.04.2006 08:19
von Toxitom
Hey Sascha,

also, das Problem ist immer: Ich poste keine kompletten Lösungen, sondern gebe Hinweise auf den Weg der Lösung. Ich setze dabei immer voraus, dass der Frager selbst zumincest Grundahnung hat und die Lösungen entsprechend weiterentwicklen kann.
Es ist immer schwierig, alles zu posten und detailliert zu beschreiben.
Die Methode print() erwartet eine Argumentenliste (einen Array, der kann auch leer sein). Das habe ich natürlich vorausgesetzt. Genauso, wie oT3 definiert werden muss. Und dann funktioniert der Code natürlich.
Also hier der vollständige, getestete und korrekte Code:

Code: Alles auswählen

Sub DruckenBereiche
	dim arg()
	oDoc = thisComponent
	oT3 = oDoc.sheets(2)
	Dim aDruckbereiche(0)
	oDruckbereich1 = oT3.getCellRangeByName("a1:n50").rangeAddress
	aDruckbereiche(0) = oDruckbereich1
	oT3.setPrintAreas(aDruckbereiche())
	oDoc.print(arg()) 
End Sub
Ich hoffe, es hilft dir jetzt ein wenig weiter.

Gruss
Thomas

Danke!

Verfasst: Do, 06.04.2006 10:49
von sascha11
Hey!

danke- so geht es!

Danke!

Sascha