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 істинно, тоді вбудовані функції також будуть перевірені тут.

Повертає

bool

істина, якщо зазначену функцію потрібно завжди перераховувати.

Зауваження

Для спільних формул кілька клітинок ділять одну й ту ж функцію. Якщо параметри функції також залишаються незмінними для цих клітинок, тоді зазвичай цю функцію потрібно обчислити лише один раз. Отже, з метою продуктивності ми також обчислюємо таку функцію лише один раз (Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) викликається лише один раз, а не повторно для кожної клітинки). Однак для користувацької реалізації користувача функція, особливо користувацька функція, може потребувати обчислення по-різному для різних клітинок. Якщо так, користувачеві потрібно перевизначити цей метод, щоб він повертав true для функції. І для Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) задане значення Aspose.Cells.CalculationData.CalculatedValue може бути ініціалізовано з кешованим значенням попереднього обчислення.

SkipCalculation()

protected void SkipCalculation()
 Українська