OpenOffice Makro funktioniert nicht ganz in LibreOffice

Ich bin von OpenOffice zu LibreOffice umgestiegen. Nun habe ich Probleme mit dem folgenden Makro bekommen. Es wird die letzte Tabelle immer gedruckt, egal was für ein Wert in A6.

Sub DRUCKEN

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("A6").Value > 0 Then
      ThisComponent.CurrentController.setActiveSheet(.getByIndex(i))
      ThisComponent.Print(PrintProp())
    End If
  Next i
End With

Call WAHL

End sub

Nur ein Hinweis: Eine leere Zelle ist nicht “= 0”

Ja das habe ich berücksichtigt. In der Zelle A6 steht immer ein Wert zwischen 0 bis 1000. (Kein Text, Keine leere Zelle) Wenn ich das letzte Tabellenblatt lösche wird danach das “2. letzte” Tabellenblatt immer gedruckt.

Das steht ja auch so in deinem Makro!

Ich habe das Makro vor 14 Jahren in meiner Tabelle für Openoffice eingebaut. Seither hat es so funktioniert wie es sollte (Drucke nur die Tabellenblätter mit Wert grösser 0 in Zelle A6). Erst mit dem kürzlichen umstieg auf Libreoffice habe ich Probleme bekommen.
Ich verstehe nicht warum das passiert. Ich vermute es hängt mit ActiveSheet und der Art wie Openoffice und LibreOffice dies handhaben zusammen, kenne mich aber zu wenig aus um das Problem zu lösen bzw. wo ich ansetzen muss. Macht es Sinn das ich das Makro komplett neu erstelle oder gibt es einen schnelle Fix?

Was genau ist das Problem?

  • werden die anderen Tabellen nicht gedruckt?
  • wird die letzte Tabelle immer gedruckt, auch wenn eine 0 in Zelle A6 steht?

Alle Tabellen die gedruckt werden sollen (weil Wert grösser als 0 in A6) werden gedruckt, aber die letzte Tabelle wird ungewollt immer gedruckt auch wenn 0 in A6 steht.

Beispiel: Tabelle1: Wert 1 / Tabelle2: Wert 0 / Tabelle3: Wert 0 / Tabelle4: Wert 1 / Tabelle5: Wert 0
Gedruckt werden sollen Tabelle 1 und 4, effektiv gedruckt wird aber 1, 4 und 5

Ich verwende aktuell LibreOffice 25.8.2 (zuvor Openoffice 4.1.7)

In OpenOffice wird 1 + 4 gedruckt, gleiches Makro in LibreOffice druckt 1 + 4 + 5

Das ist dann wohl ein Bug in Libreoffice?!

Funktioniert es mit:

from com.sun.star.beans import PropertyValue as pv
def print_if_A6(*_ ): 
    doc = XSCRIPTCONTEXT.getDocument()
    frame = doc.CurrentController.Frame
    dispatcher = XSCRIPTCONTEXT.ctx.ServiceManager.createInstance("com.sun.star.frame.DispatchHelper")
    to_print = tuple( i for i, sheet in enumerate(doc.Sheets) if sheet["A6"].Value > 0 )
    args = pv(Name = "Tables", Value = to_print )
    dispatcher.executeDispatch(frame, ".uno:SelectTables", "", 0, (args,))
    print_props = pv( Name = "Wait", Value = True )
    doc.print( (print_props,))

Das ist python, benutze bei Bedarf die Erweiterung apso.oxt

Was macht WAHL ?

Ja Funktioniert, Danke

sub WAHL
 myDoc = thisComponent
   myView = myDoc.CurrentController
  mysheet = myDoc.sheets(3)
  mycell =  mysheet.getCellByPosition(0,0)
  myView.Select(mycell)
end sub

Damit nach DRUCKEN wieder die Seite mit den Makro-Buttons angezeigt wird.

Das kannst du auch noch mit einer zusätzlichen Zeile in der python-function tun:

    …
    doc.CurrentController.select( doc.Sheets[3][0,0])

Danke, 1 Click weniger ist immer besser :smiley: