[gelöst] Argumente einer gegebenen Funktion bekommen
Verfasst: So, 24.05.2015 14:01
Hallo,
ich schreibe in Java ein Add-On für OpenOffice Calc.
Dabei habe ich folgendes Problem:
Wenn eine Zelle ausgewählt ist, die eine Formel enthält, brauche ich den lokalen Namen dieser Funktion/Formel und den Wert der Funktion. Außerdem brauche ich die Argumente der Funktion. Hier ein paar Beispiele:
1. Bei "=SUM(4;5)" brauche ich folgende Informationen: lokaler Name der Funktion: "SUMME", Argumente der Funktion: 4 (int), 5 (int).
2. Sieht die Formel aber komplizierter aus: "=SUM(PRODUCT(B4;C3);8)" muss das auch funktionieren.
In diesem Bsp brauche ich den Namen der äußeren Funktion: "SUMME", deren Argumente: PRODUKT(B4;C3) (Formel), 8 (int) und das gleiche für die innere Funktion.
Also Name: "PRODUKT", Argumente: B4 (Zellverweis), C3 (Zellverweis) und dann folge ich noch den Zellverweisen und werte aus was darin steht (das klappt aber schon).
3. Auch bei Text-Formeln soll das funktionieren: "=CONCATENATE("Programmier";"sprache")" -> Name: VERKETTEN, Argumente: "Programmier" (String), "sprache" (String).
4. auch bei allen anderen Formeln, die in Calc zur Verfügung stehen, mit allen denkbaren Kombinationen und Spezialfällen, soll das funktionieren.
Am Ende soll also das Ergebnis der kompletten Formel ausgegeben werden, die einzelnen Namen aller Funktionen, die daran beteiligt waren, sowie die Argumente der Funktionen (im Bsp 2 wären die Argumente, die ich als Ausgabe benötige: der Wert aus B4, der Wert aus C3 und
.
Die lokalen Namen der Funktionen bekomme ich über die Cell-Properties "FormulaLocal".
Wenn die Argumente der Funktionen nur Verweise auf andere Zellen sind, in denen dann die Werte stehen, bekomme ich das alles mit "com.sun.star.sheet.XFormulaQuery, queryPrecedents()" hin. Aber es sollen eben auch so Funktionen wie im Beispiel verarbeitet werden, die gar nicht oder nur teilweise auf andere Zellen verweisen.
Im Beispiel 2 kann ich mit "com.sun.star.sheet.XFunctionAccess, callFunction()" den Wert der inneren Funktion (PRODUKT) berechnen.
Aber wie bekomme ich überhaupt die Argumente der äußeren Funktion (SUMME), sodass ich die innere Funktion auswerten kann?
Kennt jemand eine Methode, die mir die Argumente der Funktionen ausgibt?
Ich wäre sehr dankbar, wenn mir dabei jemand helfen könnte!
darka
ich schreibe in Java ein Add-On für OpenOffice Calc.
Dabei habe ich folgendes Problem:
Wenn eine Zelle ausgewählt ist, die eine Formel enthält, brauche ich den lokalen Namen dieser Funktion/Formel und den Wert der Funktion. Außerdem brauche ich die Argumente der Funktion. Hier ein paar Beispiele:
1. Bei "=SUM(4;5)" brauche ich folgende Informationen: lokaler Name der Funktion: "SUMME", Argumente der Funktion: 4 (int), 5 (int).
2. Sieht die Formel aber komplizierter aus: "=SUM(PRODUCT(B4;C3);8)" muss das auch funktionieren.
In diesem Bsp brauche ich den Namen der äußeren Funktion: "SUMME", deren Argumente: PRODUKT(B4;C3) (Formel), 8 (int) und das gleiche für die innere Funktion.
Also Name: "PRODUKT", Argumente: B4 (Zellverweis), C3 (Zellverweis) und dann folge ich noch den Zellverweisen und werte aus was darin steht (das klappt aber schon).
3. Auch bei Text-Formeln soll das funktionieren: "=CONCATENATE("Programmier";"sprache")" -> Name: VERKETTEN, Argumente: "Programmier" (String), "sprache" (String).
4. auch bei allen anderen Formeln, die in Calc zur Verfügung stehen, mit allen denkbaren Kombinationen und Spezialfällen, soll das funktionieren.
Am Ende soll also das Ergebnis der kompletten Formel ausgegeben werden, die einzelnen Namen aller Funktionen, die daran beteiligt waren, sowie die Argumente der Funktionen (im Bsp 2 wären die Argumente, die ich als Ausgabe benötige: der Wert aus B4, der Wert aus C3 und

Die lokalen Namen der Funktionen bekomme ich über die Cell-Properties "FormulaLocal".
Wenn die Argumente der Funktionen nur Verweise auf andere Zellen sind, in denen dann die Werte stehen, bekomme ich das alles mit "com.sun.star.sheet.XFormulaQuery, queryPrecedents()" hin. Aber es sollen eben auch so Funktionen wie im Beispiel verarbeitet werden, die gar nicht oder nur teilweise auf andere Zellen verweisen.
Im Beispiel 2 kann ich mit "com.sun.star.sheet.XFunctionAccess, callFunction()" den Wert der inneren Funktion (PRODUKT) berechnen.
Aber wie bekomme ich überhaupt die Argumente der äußeren Funktion (SUMME), sodass ich die innere Funktion auswerten kann?
Kennt jemand eine Methode, die mir die Argumente der Funktionen ausgibt?
Ich wäre sehr dankbar, wenn mir dabei jemand helfen könnte!
darka