Hallo liebe Gemeinde,
ich hab da mal wieder zwei Probleme wo ich nicht mehr weiter komme.
Eine normale Formel zwischen 2 Calc-Dateien kann man ja mittels (pseudo-code!)
Code: Alles auswählen
Dim array2d()
array2d = oQuelle.Sheets(1).getcellbyposition(3, 1).getFormulaArray()
oZiel.Sheets(2).getcellbyposition(3, 1).setFormulaArray(array2d)
kopieren. Das funktioniert ja auch wunderbar.
Aber!
Diese Methode versagt irgendwie, wenn es sich bei der zu kopierenden Formel um eine Matrixformel handelt, wie z.B.
{=MAX(...)}. Denn dann steht die Matrixformel in der Zieldatei als Text da, also ohne Funktion gar so als hätte man in den Optionen das Häkchen für Formeln anzeigen gesetzt.
Ich hatte jetzt schon mal mit getArrayFormula und setArrayFormula getestet, aber das haut überhaupt nicht hin, da dann überhaupt keine Formel kopiert wird, weder normale noch Matrix.
Wie kann ich also denn nun eine Matrixformel zwischen 2 Dateien so kopieren das sie in der Zieldatei auch funktioniert?
Und das zweite Problem was mit dem ersten zu tun hat, ist folgendes.
Wie kann ich herausfinden ob es sich bei dem Inhalt der Quellzelle um eine Matrixformel handelt, oder um eine normale Formel?
Ja! Ich arbeite mit xray!
Ich habe auch versucht zwei verschiedene Zellen, einmal mit und einmal ohne Matrixformel, mit xray zu untersuchen. Konnte da aber oberflächlich auf den ersten Blick keinen einfachen Unterschied feststellen, bis auf einen.
Code: Alles auswählen
xray ThisComponent.Sheets.GetByName("Tabelle1").getCellRangeByName("D4")
Normale Zelle ergab bei:
ArrayTokens
[]struct <empty> pseudo-prop
und bei der Matrixzelle bei:
ArrayTokens
[]struct pseudo-prop
Jedoch kann ich momentan damit überhaupt nix anfangen, bezüglich Auswertung.
Also hatte ich dann etwas "tiefer" geforscht, und dachte mir vielleicht geht da ja was mit
ImplementationId. Doch da gibt es ja verschiedene Stellen wo die ImplementationId steht, seis z.B. bei .ConditionalFormatLocal.ImplementationId oder .UserDefinedAttributes.ImplementationId (gibt ja noch andere Stellen). Aber das hilft mir auch nicht so weiter, da ich wahrscheinlich noch nicht alle Stellen abgeklappert habe und außerdem auch nicht weiter wüsste wie ich das auswerten kann.
Und was hat das zweite Problem mit dem ersten zu tun?
Nun, wenn ich wüsste wie ich herausfinden kann ob die Quellzelle eine Matrixformel ist, oder nicht, könnte ich dann eine Verzweigung einbauen die dann zu der dementsprechenden richtigen Kopierroutine springt. Denn ich will ja nicht nur Matrixformeln, sondern auch normale Formeln fehlerfrei und funktionsfähig zwischen 2 Dateien kopieren.
Weiss da jemand Rat wie ich da weiter komme?
Ich bedanke mich schon mal für Eure Bemühungen, und seis auch nur für das lesen
Gruß
balu