Verwendung der ICustomFunction Funktion
Dieser Artikel bietet eine ausführliche Erklärung zur Verwendung des ICustomFunction-Features zur Implementierung benutzerdefinierter Funktionen mit Aspose.Cells-APIs.
Die ICustomFunction-Schnittstelle ermöglicht die Hinzufügung benutzerdefinierter Formelberechnungsfunktionen, um den Kernberechnungsmotor von Aspose.Cells zu erweitern, um bestimmte Anforderungen zu erfüllen. Diese Funktion ist nützlich, um benutzerdefinierte Funktionen in einer Vorlagendatei oder im Code zu definieren, wo die benutzerdefinierte Funktion mit Aspose.Cells-APIs wie jede andere Standard-Microsoft Excel-Funktion implementiert und ausgewertet werden kann.
Bitte beachten Sie, dass diese Schnittstelle durch AbstractCalculationEngine ersetzt wurde und in Zukunft entfernt wird. Einige technische Artikel/Beispiele zu der neuen API: hier und hier
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...
...
}