mehrer Tabellenblätter per Makro drucken

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

F3K Total
********
Beiträge: 3723
Registriert: Mo, 28.02.2011 17:49

Re: mehrer Tabellenblätter per Makro drucken

Beitrag von F3K Total »

Hi ph2.ael,
hier ein Makro was genau das tut:

Code: Alles auswählen

Sub S_print_multiple_tables

odoc=thiscomponent
osheets=odoc.sheets
ncount=osheets.count

oRanges = odoc.createInstance("com.sun.star.sheet.SheetCellRanges")

'Tabellenblätter finden
for i=0 to nCount-1
 if osheets(i).getcellbyposition(0,0).value>0 then 'Wenn A1 größer 0
   oRange = osheets(i).getCellRangeByName("A1")
   oRanges.addRangeAddress(oRange.RangeAddress, True)
 endif
next i

'Tabellenblätter auswählen
oController = odoc.currentcontroller
oController.select(oRanges)

'und drucken
dim printProp() as new com.sun.star.beans.PropertyValue
odoc.print(printProp())

End Sub
Viel Spaß
Gruß R
F3K Total
********
Beiträge: 3723
Registriert: Mo, 28.02.2011 17:49

Re: mehrer Tabellenblätter per Makro drucken

Beitrag von F3K Total »

Hallo,
genau an dieser Stelle:
if osheets(i).getcellbyposition(0,0).value>0 then
wird geschaut ob das entsprechende Blatt gedruckt werden soll.
Dabei erwartet das Makro einen Zahlenwert (.value), sollte ein Text dort stehen (Formatierung der Zelle beachten) funktioniert es so nicht, dann müsste
value>0 durch string>"" ersetzt werden.

Gruß R
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: mehrer Tabellenblätter per Makro drucken

Beitrag von Stephan »

In neueren OOo-Versionen (zumindest in OOo 1.x war das nicht so, wahrscheinlich auch in 2.x nicht) muß das zu druckende blatt immer aktiviert werden um sicherzustellen das der Ausdruck auch bei gesetzter Option (unter Extras-Optionen) 'nur ausgewählte Tabellen drucken' erfolgt. Also ungefähr so:

Code: Alles auswählen

Dim PrintProp(0) as new com.sun.star.beans.PropertyValue
PrintProp(0).Name = "Wait"
PrintProp(0).Value = True

With ThisComponent.Sheets()
  For i = 0 To .Count - 1
    If .getByIndex(i).getCellRangeByName("A1").Value > 0 Then
      ThisComponent.CurrentController.setActiveSheet(.getByIndex(i))
      ThisComponent.Print(PrintProp())
    End If 
  Next i
End With


Gruß
Stephan
F3K Total
********
Beiträge: 3723
Registriert: Mo, 28.02.2011 17:49

Re: mehrer Tabellenblätter per Makro drucken

Beitrag von F3K Total »

Hallo Stephan,
die Version über das aktiveSheet hatte ich auch ausprobiert, gefiel mir nicht, weil so jedes Blatt als einzelner Druckauftrag abgeschickt wird.
Darum habe ich länger danach gesucht, wie mehrere Blätter selektiert werden können.
Bei meiner Variante wird ein Druckauftrag über alle Blätter abgeschickt. Das ist z.B. für eine Durchnummerierung der Seiten von Vorteil.
Bei mir funktioniert es, OOo 3.3, "nur ausgewählte Tabellen drucken" ist angehakt.
Daher kann es eigentlich nicht am ActiveSheet liegen.
Ich hänge meine Datei mal dran, vielleicht könnt ihr es mal ausprobieren?

Gruß R
Dateianhänge
print_multiple_sheets.ods
(12.16 KiB) 237-mal heruntergeladen
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: mehrer Tabellenblätter per Makro drucken

Beitrag von Stephan »

Hallo R,
die Version über das aktiveSheet hatte ich auch ausprobiert, gefiel mir nicht, weil so jedes Blatt als einzelner Druckauftrag abgeschickt wird.
ja, Letzteres ist tatsächlich so (hat mich nur bisher nicht gestört)
Bei meiner Variante wird ein Druckauftrag über alle Blätter abgeschickt. Das ist z.B. für eine Durchnummerierung der Seiten von Vorteil.
Bei mir funktioniert es, OOo 3.3, "nur ausgewählte Tabellen drucken" ist angehakt.
Daher kann es eigentlich nicht am ActiveSheet liegen.
ja, die letztere Bemerkung stimmt, meine Aussage das das zu druckende Blatt aktiviert sein muß ist falsch
vielleicht könnt ihr es mal ausprobieren?
ich kann bestätigen das es bei mir auch funktioniert


Gruß
Stephan
F3K Total
********
Beiträge: 3723
Registriert: Mo, 28.02.2011 17:49

Re: mehrer Tabellenblätter per Makro drucken

Beitrag von F3K Total »

Danke!

Beste Grüße von Rik
Antworten