Class AbstractCalculationEngine

Class AbstractCalculationEngine

Namespace: Aspose.Cells
Assembly: Aspose.Cells.dll (25.2.0)

表示用户的自定义计算引擎,以扩展 Aspose.Cells 的默认计算引擎。

public abstract class AbstractCalculationEngine

继承

objectAbstractCalculationEngine

继承成员

object.GetType(), object.MemberwiseClone(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()

示例

Workbook wb = new Workbook("custom_calc.xlsx");
CalculationOptions opts = new CalculationOptions();
opts.CustomEngine = new MyEngine();
wb.CalculateFormula(opts);

class MyEngine : AbstractCalculationEngine
{
    public override void Calculate(CalculationData data)
    {
        string funcName = data.FunctionName.ToUpper();
        if ("MYFUNC".Equals(funcName))
        {
            //在此处进行 MYFUNC 的计算
            int count = data.ParamCount;
            object res = null;
            for (int i = 0; i < count; i++)
            {
                object pv = data.GetParamValue(i);
                if (pv is ReferredArea)
                {
                    ReferredArea ra = (ReferredArea)pv;
                    pv = ra.GetValue(0, 0);
                }
                //在此处处理参数
                //res = ...;
            }
            data.CalculatedValue = res;
        }
    }
}

备注

用户不应直接修改此实现中的 Workbook 的任何部分(除了自定义函数的计算结果,可以通过 CalculationData.CalculatedValue 属性进行设置)。否则可能会导致意外结果或异常。如果用户需要在实现中更改计算结果以外的其他数据,例如更改单元格的公式、样式等,用户应在此实现中收集这些数据,并在公式计算的范围之外进行更改。

构造函数

AbstractCalculationEngine()

protected AbstractCalculationEngine()

属性

IsParamArrayModeRequired

指示此引擎是否需要以数组模式计算参数。默认值为 false。如果在计算自定义函数时需要 Aspose.Cells.CalculationData.GetParamValueInArrayMode(System.Int32,System.Int32,System.Int32),而用户尚未更新其定义(通过 Aspose.Cells.Workbook.UpdateCustomFunctionDefinition(Aspose.Cells.CustomFunctionDefinition)),则此属性需要设置为 true。

public virtual bool IsParamArrayModeRequired { get; }

属性值

bool

备注

如果此自定义计算引擎需要以数组模式计算参数,则需要更多的堆栈来缓存参数的树,并且 Calculate() 方法可能会被递归调用以计算参数的值。出于性能考虑,如果没有特殊要求,请将此属性保持为默认值(false)。

IsParamLiteralRequired

指示此引擎在进行计算时是否需要参数的文字文本。默认值为 false。

public virtual bool IsParamLiteralRequired { get; }

属性值

bool

备注

如果此自定义计算引擎需要参数的文字文本,则需要更多的堆栈来缓存参数的文字文本,并且 Calculate() 方法可能会被递归调用以计算参数的值。通常,在计算公式时不需要文字文本,因此对于大多数实现,此属性应保持为 false 以获得更好的性能。

ProcessBuiltInFunctions

是否应由此实现检查和处理已由内置引擎支持的内置函数。默认值为 false。

public virtual bool ProcessBuiltInFunctions { get; }

属性值

bool

备注

如果用户需要更改某些内置函数的计算逻辑,则应将此属性设置为 true。否则,请出于性能考虑将此属性保持为 false。

方法

Calculate(CalculationData)

使用给定数据计算一个函数。

public abstract void Calculate(CalculationData data)

参数

data CalculationData

计算函数所需的数据,例如函数名称、参数等。

备注

用户应为所有希望在此实现中自行计算的函数(包括 Excel 原生函数)设置给定数据的计算值。

ForceRecalculate(string)

在计算共享公式时,是否强制始终重新计算给定函数。

public virtual bool ForceRecalculate(string functionName)

参数

functionName string

函数的名称。通常是自定义函数的名称。如果 Aspose.Cells.AbstractCalculationEngine.ProcessBuiltInFunctions 为 true,则内置函数也将在此处进行检查。

返回

bool

如果指定的函数需要始终重新计算,则为 true。

备注

对于共享公式,多个单元格共享相同的函数。如果这些单元格的函数参数也保持相同,则通常该函数只需要计算一次。因此,为了性能考虑,我们也只计算这种类型的函数一次(Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) 只调用一次,而不是为每个单元格重复调用)。然而,对于用户的自定义实现,可能函数,特别是自定义函数,需要针对不同的单元格进行不同的计算。如果是这样,用户需要重写此方法,使其对该函数返回 true。对于 Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData),给定的 Aspose.Cells.CalculationData.CalculatedValue 可能已用先前计算的缓存值初始化。

SkipCalculation()

protected void SkipCalculation()
 中文