Verwenden 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 Tabelle zu verwenden, um die Ergebnisse zu erhalten. Wir definieren eine benutzerdefinierte Funktion nach NamenMeineFunk die 2 Parameter mit folgenden Details akzeptiert.

    1. Parameter bezieht sich auf eine einzelne Zelle
    1. Parameter bezieht sich auf einen Bereich von Zellen

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

So haben wir die CalculateCustomFunction-Methode implementiert.

So verwenden Sie die neu definierte Funktion in einer Tabellenkalkulation

Überblick

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

Da die Aspose.Cells-APIs die ReferredArea in “paramsList” angeben, wird die ReferredAreaCollection in “contextObjects” nicht mehr benötigt (in alten Versionen war es nicht möglich, den Parametern der benutzerdefinierten Funktion immer eine Eins-zu-Eins-Zuordnung zu geben), daher wurde 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...

    ...

}