Verwenden der ICustomFunction-Funktion
Einführung
In diesem Artikel erfahren Sie, wie Sie das Feature ICustomFunction verwenden, um benutzerdefinierte Funktionen mit Aspose.Cells-APIs zu implementieren.
Mit der ICustomFunction-Schnittstelle können Sie benutzerdefinierte Formelberechnungsfunktionen hinzufügen, um die Kernberechnungs-Engine Aspose.Cells zu erweitern und bestimmte Anforderungen zu erfüllen. Diese Funktion ist nützlich, um benutzerdefinierte (benutzerdefinierte) Funktionen in einer Vorlagendatei oder in einem Code zu definieren, in dem die benutzerdefinierte Funktion mithilfe von Aspose.Cells-APIs wie jede andere standardmäßige Microsoft-Excel-Funktion implementiert und ausgewertet werden kann.
Verwenden der ICustomFunction-Funktion
Der folgende Beispielcode implementiert die ICustomFunction-Schnittstelle, die die Werte der beiden benutzerdefinierten Funktionen, dh MySampleFunc() und YourSampleFunc(), auswertet und zurückgibt. Diese benutzerdefinierten Funktionen befinden sich jeweils in den Zellen A1 und A2. Anschließend wird die IWorkbook.CalculateFormula(false, ICustomFunction)-Methode aufgerufen, um die Implementierung der ICustomFunction.CalculateCustomFunction()-Methode aufzurufen. Dann druckt es die Werte von A1 und A2 auf der Konsole, die tatsächlich die von ICustomFunction.CalculateCustomFunction() zurückgegebenen Werte sind. Weitere Hilfe finden Sie in der Konsolenausgabe des Beispielcodes unten.
Beispielcode
//For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-C | |
//Implement ICustomFunction interface | |
class CustomFunction : public ICustomFunction | |
{ | |
public: | |
//Evalaute and return the values of your custom functions | |
intrusive_ptr<Aspose::Cells::System::Object> | |
CalculateCustomFunction( | |
intrusive_ptr<Aspose::Cells::System::String> functionName, | |
intrusive_ptr<Aspose::Cells::System::Collections::ArrayList> paramsList, | |
intrusive_ptr<Aspose::Cells::System::Collections::ArrayList> contextObjects) | |
{ | |
if (functionName->Equals(new String("MySampleFunc"))) | |
{ | |
return new String("MY sample function was called successfully."); | |
} | |
if (functionName->Equals(new String("YourSampleFunc"))) | |
{ | |
return new String("YOUR sample function was called successfully."); | |
} | |
return NULL; | |
} | |
}; | |
//Using ICustomFunction Feature | |
void UsingICustomFunctionFeature() | |
{ | |
//Create workbook | |
intrusive_ptr<IWorkbook> wb = Factory::CreateIWorkbook(); | |
//Access first worksheet in the workbook | |
intrusive_ptr<IWorksheet> ws = wb->GetIWorksheets()->GetObjectByIndex(0); | |
//Adding custom formulas to Cell A1 and A2 | |
ws->GetICells()->GetObjectByIndex(new String("A1"))->SetFormula(new String("=MySampleFunc()")); | |
ws->GetICells()->GetObjectByIndex(new String("A2"))->SetFormula(new String("=YourSampleFunc()")); | |
// Calcualting Formulas | |
intrusive_ptr<CustomFunction> custFunc = new CustomFunction(); | |
wb->CalculateFormula(false, custFunc); | |
//Print the value of cell A1 and A2 after the calculation of custom function implemented by us. | |
intrusive_ptr<String> valA1 = ws->GetICells()->GetObjectByIndex(new String("A1"))->GetStringValue(); | |
intrusive_ptr<String> valA2 = ws->GetICells()->GetObjectByIndex(new String("A2"))->GetStringValue(); | |
//Print the values on console | |
StringPtr str1 = new String("Value of A1: "); | |
Console::WriteLine(str1->StringAppend(valA1)); | |
StringPtr str2 = new String("Value of A2: "); | |
Console::WriteLine(str2->StringAppend(valA2)); | |
} |
Konsolenausgabe
Value of A1: MY sample function was called successfully.
Value of A2: YOUR sample function was called successfully.