Verwendung der ICustomFunction Funktion

Erstellen und Auswerten einer benutzerdefinierten Funktion

Dieser Artikel demonstriert die Implementierung der ICustomFunction-Schnittstelle, um eine benutzerdefinierte Funktion zu schreiben und sie in der Tabellenkalkulation zu verwenden, um die Ergebnisse zu erhalten. Wir definieren eine benutzerdefinierte Funktion namens MyFunc, die 2 Parameter mit folgenden Details akzeptiert.

  • Der erste Parameter bezieht sich auf eine einzelne Zelle
  • Der zweite Parameter bezieht sich auf einen Zellenbereich

Die benutzerdefinierte Funktion wird alle Werte aus dem als 2. Parameter angegebenen Zellbereich addieren und das Ergebnis durch den Wert im 1. Parameter dividieren.

Hier ist, wie wir die Methode CalculateCustomFunction implementiert haben.

So verwenden Sie die neu definierte Funktion in einer Tabellenkalkulation

Übersicht

Die Aspose.Cells-APIs legen den ReferredArea-Objekt in die “paramsList”, wenn der entsprechende Parameter eine Referenz ist oder sein berechnetes Ergebnis eine Referenz ist. Wenn Sie die Referenz selbst benötigen, können Sie direkt die ReferredArea verwenden. Wenn Sie den Wert einer einzelnen Zelle aus der Referenz benötigen, die der Position der Formel entspricht, können Sie die Methode ReferredArea.GetValue(rowOffset, int colOffset) verwenden. Wenn Sie die Zellwerte für den gesamten Bereich benötigen, können Sie die Methode ReferredArea.GetValues verwenden.

Da die Aspose.Cells-APIs die ReferredArea in “paramsList” erhalten, wird die ReferredAreaCollection in “contextObjects” nicht mehr benötigt (in älteren Versionen konnte sie nicht immer eine eins-zu-eins-Mapping zu den Parametern der benutzerdefinierten Funktion erstellen), daher wurde sie aus den “contextObjects” entfernt.

 public object CalculateCustomFunction(string functionName, ArrayList paramsList, ArrayList contextObjects)

{

    ...

    object o = paramsList[i];

    if(o is ReferredArea) //fetch data from reference

    {

        ReferredArea ra = (ReferredArea)o;

        if(ra.IsArea)

        {

            o = ra.GetValues();

        }

        else

        {

            o = ra.GetValue(0, 0);

        }

    }

    if (o is Array)

    {

        ...

    }

    else if...

    ...

}