AbstractCalculationEngine

AbstractCalculationEngine class

Represents user’s custom calculation engine to extend the default calculation engine of Aspose.Cells.

abstract class AbstractCalculationEngine;

Remarks

User should not modify any part of the Workbook directly in this implementation(except the calculated result of the custom function, which can be set by CalculationData.CalculatedValue property). Otherwise unexpected result or Exception may be caused. If user needs to change other data than calculated result in the implementation for some custom functions, for example, change cell’s formula, style, …etc., user should gather those data in this implementation and change them out of the scope of formula calculation.

Methods

MethodDescription
calculate(CalculationData)Calculates one function with given data.
forceRecalculate(string)Whether force given function to be recalculated always when calculating shared formulas.
abstract isParamLiteralRequired()Indicates whether this engine needs the literal text of parameter while doing calculation. Default value is false.
abstract isParamArrayModeRequired()Indicates whether this engine needs the parameter to be calculated in array mode. Default value is false. If [CalculationData.GetParamValueInArrayMode(int, int, int)](../calculationdata.getparamvalueinarraymode(int, int, int)/) is required when calculating custom functions and user has not updated the definition for them (by Workbook.UpdateCustomFunctionDefinition(CustomFunctionDefinition)), this property needs to be set as true.
abstract getProcessBuiltInFunctions()Whether built-in functions that have been supported by the built-in engine should be checked and processed by this implementation. Default is false.

calculate(CalculationData)

Calculates one function with given data.

calculate(data: CalculationData) : void;

Parameters:

ParameterTypeDescription
dataCalculationDatathe required data to calculate function such as function name, parameters, …etc.

Remarks

User should set the calculated value for given data for all functions(including excel native functions) that he wants to calculate by himself in this implementation.

forceRecalculate(string)

Whether force given function to be recalculated always when calculating shared formulas.

forceRecalculate(functionName: string) : boolean;

Parameters:

ParameterTypeDescription
functionNamestringname of the function. Generally it is custom function’s name. /// If ProcessBuiltInFunctions is true, then built-in functions will also be checked here.

Returns

true if the specified function needs to be recalculated always.

Remarks

For shared formulas, multiple cells share the same function. If the function’s parameters keep same for those cells too, then generally this function needs to be calculated only once. So for performance consideration we only calculate such kind of function once too(Calculate(CalculationData) is called only once, instead of being called repeatedly for every cell). However, for user’s custom implementation, maybe the function, especially the custom function, needs to be calculated differently for different cells. If so, user needs to override this method to make it return true for the function. And for Calculate(CalculationData), the given Calculate(CalculationData) may have been initialized with the cached value of previous calculation.

isParamLiteralRequired()

Indicates whether this engine needs the literal text of parameter while doing calculation. Default value is false.

abstract isParamLiteralRequired() : boolean;

Remarks

If this custom calculation engine needs the parameter’s literal text, more stacks will be required to cache the literal text for parameters and Calculate() method may be called recursively to calculate the parameter’s value. Generally the literal text is not needed for calculating formulas and this property should be kept as false for most implementations to get better performance.

isParamArrayModeRequired()

Indicates whether this engine needs the parameter to be calculated in array mode. Default value is false. If [CalculationData.GetParamValueInArrayMode(int, int, int)](../calculationdata.getparamvalueinarraymode(int, int, int)/) is required when calculating custom functions and user has not updated the definition for them (by Workbook.UpdateCustomFunctionDefinition(CustomFunctionDefinition)), this property needs to be set as true.

abstract isParamArrayModeRequired() : boolean;

Remarks

If this custom calculation engine needs the parameter to be calculated in array mode, more stacks will be required to cache the tree for parameters and Calculate() method may be called recursively to calculate the parameter’s value. For performance consideration, please keep this property as the default value(false) if there is no special requirement.

getProcessBuiltInFunctions()

Whether built-in functions that have been supported by the built-in engine should be checked and processed by this implementation. Default is false.

abstract getProcessBuiltInFunctions() : boolean;

Remarks

If user needs to change the calculation logic of some built-in functions, this property should be set as true. Otherwise please leave this property as false for performance consideration.