Druckbefehl für Dokument in Makro
Moderator: Moderatoren
Druckbefehl für Dokument in Makro
hey!
gibt es für ein Dokument eine Printfunktion (Makro), z. Bsp.:
Dim oT1 as Objec
oT1=myDoc.sheets(1)
->>> oT1.print()
Danke,
Sascha
gibt es für ein Dokument eine Printfunktion (Makro), z. Bsp.:
Dim oT1 as Objec
oT1=myDoc.sheets(1)
->>> oT1.print()
Danke,
Sascha
Hey Sascha,
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
Gruss
Thomas
Ja, aber nicht für eine Tabelle:gibt es für ein Dokument eine Printfunktion
Code: Alles auswählen
oDoc.print()
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

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
wie richte ich die Druckbereiche ein
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?
Hey Sascha,
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:
Gruss
Thomas
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).gibt es eine Dokumentation dazu?
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())
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
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
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
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]
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
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
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
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:
Ich hoffe, es hilft dir jetzt ein wenig weiter.
Gruss
Thomas
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
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic