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()
 Русский