Class AbstractCalculationEngine
Namespace: Aspose.Cells
Assembly: Aspose.Cells.dll (25.2.0)
Представляет собой пользовательский механизм вычисления, чтобы расширить стандартный механизм вычисления Aspose.Cells.
public abstract class AbstractCalculationEngine
Наследование
object ← AbstractCalculationEngine
Унаследованные члены
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; }
Значение свойства
Замечания
Если этот пользовательский механизм вычисления требует, чтобы параметр вычислялся в массивном режиме, потребуется больше стеков для кэширования дерева для параметров, и метод Calculate() может быть вызван рекурсивно для вычисления значения параметра. Для соображений производительности, пожалуйста, оставьте это свойство со значением по умолчанию (false), если нет особых требований.
IsParamLiteralRequired
Указывает, требуется ли этому механизму вычисления текстовый литерал параметра во время вычислений. Значение по умолчанию - false.
public virtual bool IsParamLiteralRequired { get; }
Значение свойства
Замечания
Если этот пользовательский механизм вычисления требует текстового литерала параметра, потребуется больше стеков для кэширования текстового литерала для параметров, и метод Calculate() может быть вызван рекурсивно для вычисления значения параметра. Обычно текст литерала не нужен для вычисления формул, и это свойство должно оставаться false для большинства реализаций для достижения лучшей производительности.
ProcessBuiltInFunctions
Должны ли встроенные функции, которые поддерживаются встроенным механизмом, проверяться и обрабатываться этой реализацией. По умолчанию - false.
public virtual bool ProcessBuiltInFunctions { get; }
Значение свойства
Замечания
Если пользователь нуждается в изменении логики вычисления некоторых встроенных функций, это свойство должно быть установлено в 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, то встроенные функции также будут проверены здесь.
Возвращает
true, если указанная функция всегда должна пересчитываться.
Замечания
Для общих формул несколько ячеек используют одну и ту же функцию. Если параметры функции также остаются одинаковыми для этих ячеек, то, как правило, эту функцию нужно вычислять только один раз. Поэтому для соображений производительности мы также вычисляем такую функцию только один раз (Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) вызывается только один раз, вместо того, чтобы вызываться повторно для каждой ячейки). Однако для пользовательской реализации может потребоваться, чтобы функция, особенно пользовательская функция, вычислялась по-разному для разных ячеек. Если это так, пользователю необходимо переопределить этот метод, чтобы он возвращал true для функции. А для Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) заданное значение Aspose.Cells.CalculationData.CalculatedValue могло быть инициализировано кэшированным значением предыдущего вычисления.
SkipCalculation()
protected void SkipCalculation()