Aktualisieren von Matrixformeln mit der Filter-Funktion funktioniert nicht

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Aktualisieren von Matrixformeln mit der Filter-Funktion funktioniert nicht

Re: Aktualisieren von Matrixformeln mit der Filter-Funktion funktioniert nicht

von Karolus » Heute 06:45

Hallo
Kannst du nicht anstelle von diesen ~10 Formeln eine einzige Formel schreiben, also sowas wie:

Code: Alles auswählen

=FILTER(A:J; Bedingung)
ansonsten könntest du mal deine …ods anhängen? ( ggf. ohne persönliche Daten! )

Re: Aktualisieren von Matrixformeln mit der Filter-Funktion funktioniert nicht

von housefreund » Gestern 23:14

Danke. Ich habe es ausgeführt, nachdem ich mir nochmal eine "richtige" Art und Weise, wie man Python-Makros ausführen kann/sollte, anlesen musste. :lol:

Nun. Es wurde 1 (eine) Matrixformel aktualisiert. Es hätten ca. 10 aktualisiert werden sollen.
Gibt es da irgendwie weitere Rahmenbedingungen, die man berücksichtigen muss?
Oder kommt es bei mehrere Matrixformeln in Spalten nebeneinander dazu, dass die "Erkennung" dieser Matrixformeln nicht funktioniert? :)

Re: Aktualisieren von Matrixformeln mit der Filter-Funktion funktioniert nicht

von Karolus » Gestern 03:34

housefreund hat geschrieben: Mo, 05.01.2026 23:07 Wie genau ist es auszuführen? Nachdem ich die Quelldaten geändert habe und im Blatt mit den Matrixformeln bin
Genau dann!

Re: Aktualisieren von Matrixformeln mit der Filter-Funktion funktioniert nicht

von housefreund » Mo, 05.01.2026 23:07

Das ist ja schon etwas schade.

Daher vielen Dank für das Makro. Ich erkenne, es ist ein Python-Makro. Wie genau ist es auszuführen? Nachdem ich die Quelldaten geändert habe und im Blatt mit den Matrixformeln bin oder ... ganz anders? :)

Re: Aktualisieren von Matrixformeln mit der Filter-Funktion funktioniert nicht

von Karolus » Mo, 05.01.2026 05:18

Hallo
Ja, leider können Matrix-formeln mit expliziten Ausgabebereichen NICHT automatisch die Grösse des Bereichs anpassen, im Prinzip musst du bei jeder Änderung der Quelldaten die Formel komplett neu in der Ausgangszelle initialisieren. Da daß manuell eher umständlich ist:

Code: Alles auswählen

from com.sun.star.beans import PropertyValue as pv

def resize_FormulaArrays(*_):
    doc = XSCRIPTCONTEXT.getDocument()

    frame = doc.CurrentController.Frame
    disp = XSCRIPTCONTEXT.ctx.ServiceManager.createInstance("com.sun.star.frame.DispatchHelper")
    sheet = doc.CurrentController.ActiveSheet
    ranges = sheet.queryContentCells(16) #all Formula[range]

    for single in ranges:
        if (formula:=single.ArrayFormula): # is there a ArrayFormula?        
            single.clearContents(16) # clear output-range
            arg = pv( Name="ToPoint", Value= single[0,0].AbsoluteName)
            disp.executeDispatch(frame, ".uno:GoToCell", "", 0, (arg,))
            arg = pv( Name="Formula", Value = formula[1:-1] )
            disp.executeDispatch(frame, ".uno:InsertMatrix", "", 0, (arg,))  

Aktualisieren von Matrixformeln mit der Filter-Funktion funktioniert nicht

von housefreund » So, 04.01.2026 20:52

Hallo zusammen,

ich habe eine Haushaltsbuch-Datei in LO Calc.

In einem bestimmten Blatt lasse mir für einen Zeitraum (z. B. 1.9.-30.9.2025) diejenigen Blätter mit Kosten ausgeben, die im angegebenen Zeitraum halt Kosten hatten. Das geht recht simpel mit einer SUMMEWENNS-Funktion, um das so abzuchecken.
Sagen wir mal, es sind die Blätter "Lebensmittel" und "Urlaub".

Nun möchte ich alle Ausgaben aus diesen Blättern mit mit den Ausgaben im vorab genannten Zeitraum ausgeben. Das heißt je Ausgabe habe ich mir Funktionen gebaut, die
a) das Datum der Ausgabe,
b) eine Kurzbeschreibung und
c) den Betrag der Ausgabe
liefern.

Das geht auch mittels der INDIREKT-Funktion über die vorab genannten Blätternamen und dann die FILTERN-Funktion über diejenigen Werte, deren erfasstes Ausgabedatum zwischen den o. g. Termindaten liegt... beziehungsweise, es sollte so gehen. Es sind also Matrixformeln.

Aber ich habe hierbei folgende Beobachtungen bzgl. Problemen gemacht:
1) Ich muss die Datensätze, die ich aus dem Blatt "Lebensmittel" ziehe, in 3 Spalten für sich setzen. Links und rechts von diesen 3 Spalten darf nichts sein. Sonst werden die Matrixformeln, die sich auf das nächste Blatt "Urlaub" beziehen, irgendwie fälschlicher Weise verlängert und erzeugen #NV-Werte

2) Anscheinend funktioniert nicht das eigenständige "Aktualisieren" der Matrixformeln.
Denn falls ich den eingangs erwähnten Zeitraum umsetze auf den 1.8.-31.8.25, erhalte ich zwar zunächst die neue Liste von Blättern/Ausgabenkategorien in diesem Zeitraum.
Allerdings funktionieren nicht die Matrixformeln vollständig. Falls die alten erzeugten Datensätze eine längere Liste erzeugt haben und die Berechnung für den neuen Zeitraum nur 3 Ergebnisse beinhaltet, sind einige Einträge schlichtweg dupliziert, um die alte Anzahl an gefilterten Daten zu erreichen. Oder auch mit #NV-Werten aufgefüllt. Voll komisch.
Falls die gefilterte Liste des neuen Zeitraums länger ist, sind zwar neue Daten zu sehen, aber nur mit der Länge der alten Liste. Die alte Liste wird nicht erweitert, sprich sie wird abgeschnitten und es fehlen Daten.

Oder habe ich hier etwas falsch verstanden, wie die Formeln einzubauen sind?
Gibt es einen Weg, die Daten richtig rausgefiltert zu bekommen? Ich brauche sie. :/

Hier noch die Versionsinformationen:

Code: Alles auswählen

Version: 25.8.4.2 (X86_64) / LibreOffice Community
Build ID: 580(Build:2)
CPU threads: 8; OS: Linux 6.18; UI render: default; VCL: gtk3
Locale: de-DE (de_DE.UTF-8); UI: de-DE
25.8.4-1
Calc: threaded

Nach oben