Uso de la función ICustomFunction

Introducción

Este artículo proporciona información sobre cómo usar la función ICustomFunction para implementar funciones personalizadas con las API Aspose.Cells.

La interfaz ICustomFunction le permite agregar funciones de cálculo de fórmulas personalizadas para ampliar el motor de cálculo central Aspose.Cells para cumplir con ciertos requisitos. Esta característica es útil para definir funciones personalizadas (definidas por el usuario) en un archivo de plantilla o en un código donde la función personalizada se puede implementar y evaluar utilizando las API Aspose.Cells como cualquier otra función de Excel predeterminada Microsoft.

Uso de la función ICustomFunction

El siguiente código de ejemplo implementa la interfaz ICustomFunction que evalúa y devuelve los valores de las dos funciones personalizadas, es decir, MySampleFunc() y YourSampleFunc(). Estas funciones personalizadas están dentro de las celdas A1 y A2 respectivamente. Luego llama al método IWorkbook.CalculateFormula(false, ICustomFunction) para invocar la implementación del método ICustomFunction.CalculateCustomFunction(). Luego, imprime los valores de A1 y A2 en la consola, que en realidad son los valores devueltos por ICustomFunction.CalculateCustomFunction(). Consulte el resultado de la consola del código de muestra a continuación para obtener más ayuda.

Código de muestra

//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));
}

Salida de consola

 Value of A1: MY sample function was called successfully.

Value of A2: YOUR sample function was called successfully.