Class AbstractCalculationEngine

Class AbstractCalculationEngine

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

Representa o mecanismo de cálculo personalizado do usuário para estender o mecanismo de cálculo padrão do Aspose.Cells.

public abstract class AbstractCalculationEngine

Herança

objectAbstractCalculationEngine

Membros Herdados

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

Exemplos

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))
        {
            //realizar cálculo para MYFUNC aqui
            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);
                }
                //processar o parâmetro aqui
                //res = ...;
            }
            data.CalculatedValue = res;
        }
    }
}

Observações

O usuário não deve modificar nenhuma parte do Workbook diretamente nesta implementação (exceto o resultado calculado da função personalizada, que pode ser definido pela propriedade CalculationData.CalculatedValue). Caso contrário, um resultado inesperado ou uma exceção pode ser causada. Se o usuário precisar alterar outros dados além do resultado calculado na implementação para algumas funções personalizadas, por exemplo, alterar a fórmula da célula, estilo, …etc., o usuário deve reunir esses dados nesta implementação e alterá-los fora do escopo do cálculo da fórmula.

Construtores

AbstractCalculationEngine()

protected AbstractCalculationEngine()

Propriedades

IsParamArrayModeRequired

Indica se este mecanismo precisa que o parâmetro seja calculado em modo de array. O valor padrão é falso. Se Aspose.Cells.CalculationData.GetParamValueInArrayMode(System.Int32,System.Int32,System.Int32) for necessário ao calcular funções personalizadas e o usuário não tiver atualizado a definição para elas (por Aspose.Cells.Workbook.UpdateCustomFunctionDefinition(Aspose.Cells.CustomFunctionDefinition)), esta propriedade deve ser definida como verdadeira.

public virtual bool IsParamArrayModeRequired { get; }

Valor da Propriedade

bool

Observações

Se este mecanismo de cálculo personalizado precisar que o parâmetro seja calculado em modo de array, mais pilhas serão necessárias para armazenar a árvore para os parâmetros e o método Calculate() pode ser chamado recursivamente para calcular o valor do parâmetro. Por consideração de desempenho, mantenha esta propriedade como o valor padrão (falso) se não houver requisitos especiais.

IsParamLiteralRequired

Indica se este mecanismo precisa do texto literal do parâmetro ao fazer o cálculo. O valor padrão é falso.

public virtual bool IsParamLiteralRequired { get; }

Valor da Propriedade

bool

Observações

Se este mecanismo de cálculo personalizado precisar do texto literal do parâmetro, mais pilhas serão necessárias para armazenar o texto literal para os parâmetros e o método Calculate() pode ser chamado recursivamente para calcular o valor do parâmetro. Geralmente, o texto literal não é necessário para calcular fórmulas e esta propriedade deve ser mantida como falsa para a maioria das implementações, a fim de obter melhor desempenho.

ProcessBuiltInFunctions

Se as funções integradas que foram suportadas pelo mecanismo integrado devem ser verificadas e processadas por esta implementação. O padrão é falso.

public virtual bool ProcessBuiltInFunctions { get; }

Valor da Propriedade

bool

Observações

Se o usuário precisar alterar a lógica de cálculo de algumas funções integradas, esta propriedade deve ser definida como verdadeira. Caso contrário, mantenha esta propriedade como falsa por consideração de desempenho.

Métodos

Calculate(CalculationData)

Calcula uma função com os dados fornecidos.

public abstract void Calculate(CalculationData data)

Parâmetros

data CalculationData

os dados necessários para calcular a função, como nome da função, parâmetros, …etc.

Observações

O usuário deve definir o valor calculado para os dados fornecidos para todas as funções (incluindo funções nativas do Excel) que ele deseja calcular por conta própria nesta implementação.

ForceRecalculate(string)

Se for necessário forçar a recalculação de uma função dada sempre que calcular fórmulas compartilhadas.

public virtual bool ForceRecalculate(string functionName)

Parâmetros

functionName string

nome da função. Geralmente é o nome da função personalizada. Se Aspose.Cells.AbstractCalculationEngine.ProcessBuiltInFunctions for verdadeiro, então as funções integradas também serão verificadas aqui.

Retorna

bool

verdadeiro se a função especificada precisa ser recalculada sempre.

Observações

Para fórmulas compartilhadas, várias células compartilham a mesma função. Se os parâmetros da função também permanecerem os mesmos para essas células, geralmente essa função precisa ser calculada apenas uma vez. Portanto, por consideração de desempenho, calculamos esse tipo de função apenas uma vez também (Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) é chamado apenas uma vez, em vez de ser chamado repetidamente para cada célula). No entanto, para a implementação personalizada do usuário, pode ser que a função, especialmente a função personalizada, precise ser calculada de forma diferente para diferentes células. Se for o caso, o usuário precisa substituir este método para fazê-lo retornar verdadeiro para a função. E para Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData), o Aspose.Cells.CalculationData.CalculatedValue fornecido pode ter sido inicializado com o valor em cache do cálculo anterior.

SkipCalculation()

protected void SkipCalculation()
 Português