[solved].FunctionAccess begrenzte Array Größe ?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

RasmusV
*
Beiträge: 14
Registriert: Sa, 23.02.2013 19:16

[solved].FunctionAccess begrenzte Array Größe ?

Beitrag von RasmusV »

Hallo Forengemeinde,

ich bin derzeit auf etwas gestoßen, was mich verzweifeln lässt.

Mit dem Uno com.sun.star.sheet.Functionaccess wollte ich in Calc integrierte Funktionen ausführen. Allerdings bekomme ich eine Fehlermeldung zurück, so bald das Array, auf das die Funktion angewendet werden soll, größer als 253 Felder ist.
Der folgende Code stellt das Problem dar.

Code: Alles auswählen

Sub Test

Dim oFA as Object
Dim iArray as Integer
Dim i as Integer

oFA = createUnoService("com.sun.star.sheet.FunctionAccess")

Redim iArray(254)
For i = 0 to UBound(iArray)
	iArray(i) = i
Next i

i = oFA.callFunction("SUM", iArray)

MsgBox i	

End Sub
Die einfachen integrierten Funktionen lassen sich natürlich schnell selbst schreiben. Allerdings wollte ich auch kompliziertere Funktionen verwenden. Wendet man die Funktionen auf einen Zellbereich an, funktioniert es. Allerdings wäre das nur eine Lösung über Umwege.

Ich hoffe ihr könnt mir helfen. Besten Dank schon Mal im Voraus!
Zuletzt geändert von RasmusV am Mi, 12.06.2013 20:37, insgesamt 1-mal geändert.
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: .FunctionAccess begrenzte Array Größe ?

Beitrag von Stephan »

Allerdings bekomme ich eine Fehlermeldung zurück, so bald das Array, auf das die Funktion angewendet werden soll, größer als 253 Felder ist.
ich habe das jetzt nicht geprüft, aber Deine Forderung ansich ist doch schon falsch denn Du kannst nicht erwarten das sich Tabellenfunktionen per Basic anders parametrieren lassen als wenn Du sie 'normal' im Tabellenblatt benutzt.
SUMME() lässt dort aber nur 30 Summanden zu, so das ich es sogar für einen Fehler hielte das es mit 253 Summanden überhaupt funktioniert, bei 30 sollte Schluss sein.


Hinweis: 30 Summanden sind natürlich nicht zwingend 30 Zahlen sondern können weitaus mehr sein da auch pro Summand ein Zellbereich übergeben werden kann, ob hingegen die Übergabe eines Arrays pro Summand möglich ist, müsste man testen.

Gruß
Stephan
RasmusV
*
Beiträge: 14
Registriert: Sa, 23.02.2013 19:16

Re: .FunctionAccess begrenzte Array Größe ?

Beitrag von RasmusV »

Vielen Dank für deine Antwort!

Das heißt also, dass bei einer Anwendung auf einen Zellbereich, die Funktionen sich das in "passende Häppchen" aufteilen, damit sie damit rechnen können?

Für so einfache Funktionen wie SUM oder MAX etc. ist es ja auch kein Problem die selber zu schreiben. Bei Funktionen wie Correl wirds dann schon aufwändiger.

Beste Grüße!
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: .FunctionAccess begrenzte Array Größe ?

Beitrag von Stephan »

Das heißt also, dass bei einer Anwendung auf einen Zellbereich, die Funktionen sich das in "passende Häppchen" aufteilen, damit sie damit rechnen können?
In praktischen Sinne wird das irgendwie der Fall sein, im grundsätzlichen Sinne kann ich das nicht sagen weil ich dazu in den Quellcode von OO schauen müsste um zu ergründen wie die Funktion SUMME() dort implementiert ist.


Meine Feststellung war doch aber weitaus allgemeiner indem ich sinngemäß sagte das jede Funktion auch mittels Basic nur so zu nutzen ist wie sie spezifiziert/dokumentiert ist, d.h. für die Funktion SUMME() sind genauso nur max. 30 Einzelsummanden zulässig wie für z.B. die Funktion KÜRZEN( ) genau nur 2 Parameter.
Das hat nichts mit der menschlichen Sicht der Dinge zu tun sondern damit das Tabellenfunktionen hinsichtlich ihrer Parameter nun einmal genau spezifiziert sind.

Nochmals: wenn die Funktion SUMME() per Basic mehr als 30 Parameter akzeptiert ist das eigentlich bereits ein klarer Fehler, selbst wenn er Dich nicht stören mag oder Deinen Anforderungen sogar entgegenkommt.
(Diese Aussage hat nichts damit zu tu das ich 30 Parameter gut finde, denn mir persönlich ist egal ob 30 oder 3000, sondern nur damit wie die Funktion SUMME() nun einmal spezifiziert ist.)



Gruß
Stephan
RasmusV
*
Beiträge: 14
Registriert: Sa, 23.02.2013 19:16

Re: .FunctionAccess begrenzte Array Größe ?

Beitrag von RasmusV »

:D das hab ich so schon verstanden...

Mein Fehler liegt darin, dass es mir nicht bekannt war, dass die internen Funktionen nur für 30 Werte ausgelegt sind.

Das mit den "Häppchen" wollte ich nur wissen, da es mich interessierte, wie es sichergestellt ist, dass bei Anwendung auf einen Zellbereich die Funktionen trotzdem arbeiten.

Nun werde ich mir die Funktionen eben schnell selbst schreiben, bzw. komplexe eben über den Zellbereich anwenden.

Besten Dank für deine Ausführung!

Viele Grüße!
Antworten