Aktualisieren von Matrixformeln mit der Filter-Funktion funktioniert nicht

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

housefreund
******
Beiträge: 608
Registriert: Do, 03.01.2008 23:23

Aktualisieren von Matrixformeln mit der Filter-Funktion funktioniert nicht

Beitrag von housefreund »

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
Karolus
********
Beiträge: 7553
Registriert: Mo, 02.01.2006 19:48

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

Beitrag von Karolus »

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,))  
LO25.2… debian 13( trixie ) auf Raspberry5 8GB (ARM64)
LO25.8… flatpak debian 13( trixie ) auf Raspberry5 8GB (ARM64)
Antworten