Utilisation de la fonctionnalité ICustomFunction
Introduction
Cet article explique comment utiliser la fonctionnalité ICustomFunction pour implémenter des fonctions personnalisées avec les API Aspose.Cells.
L’interface ICustomFunction vous permet d’ajouter des fonctions de calcul de formule personnalisées pour étendre le moteur de calcul de base Aspose.Cells afin de répondre à certaines exigences. Cette fonctionnalité est utile pour définir des fonctions personnalisées (définies par l’utilisateur) dans un fichier de modèle ou dans un code où la fonction personnalisée peut être implémentée et évaluée à l’aide des API Aspose.Cells comme toute autre fonction Excel Microsoft par défaut.
Utilisation de la fonctionnalité ICustomFunction
L’exemple de code suivant implémente l’interface ICustomFunction qui évalue et renvoie les valeurs des deux fonctions personnalisées, à savoir MySampleFunc() et YourSampleFunc(). Ces fonctions personnalisées se trouvent respectivement dans les cellules A1 et A2. Ensuite, il appelle la méthode IWorkbook.CalculateFormula(false, ICustomFunction) pour appeler l’implémentation de la méthode ICustomFunction.CalculateCustomFunction(). Ensuite, il imprime les valeurs de A1 et A2 sur la console qui sont en fait les valeurs renvoyées par ICustomFunction.CalculateCustomFunction(). Veuillez consulter la sortie de la console de l’exemple de code ci-dessous pour plus d’aide.
Exemple de code
//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)); | |
} |
Sortie console
Value of A1: MY sample function was called successfully.
Value of A2: YOUR sample function was called successfully.