Druckbefehl für Dokument in Makro

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

sascha11
***
Beiträge: 82
Registriert: Di, 10.01.2006 11:21

Druckbefehl für Dokument in Makro

Beitrag 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
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
sascha11
***
Beiträge: 82
Registriert: Di, 10.01.2006 11:21

wie richte ich die Druckbereiche ein

Beitrag 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?
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
sascha11
***
Beiträge: 82
Registriert: Di, 10.01.2006 11:21

Beitrag 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
sascha11
***
Beiträge: 82
Registriert: Di, 10.01.2006 11:21

bei google gefunden

Beitrag 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]
sascha11
***
Beiträge: 82
Registriert: Di, 10.01.2006 11:21

so erhalte ich eine andere Fehlermeldung

Beitrag 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
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
sascha11
***
Beiträge: 82
Registriert: Di, 10.01.2006 11:21

Danke!

Beitrag von sascha11 »

Hey!

danke- so geht es!

Danke!

Sascha
Antworten