Class AbstractCalculationEngine
Namespace: Aspose.Cells
Assembly: Aspose.Cells.dll (25.2.0)
Representa el motor de cálculo personalizado del usuario para extender el motor de cálculo predeterminado de Aspose.Cells.
public abstract class AbstractCalculationEngine
Herencia
object ← AbstractCalculationEngine
Miembros heredados
object.GetType(), object.MemberwiseClone(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()
Ejemplos
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 aquí
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);
}
//procesar el parámetro aquí
//res = ...;
}
data.CalculatedValue = res;
}
}
}
Observaciones
El usuario no debe modificar ninguna parte del Workbook directamente en esta implementación (excepto el resultado calculado de la función personalizada, que puede ser establecido por la propiedad CalculationData.CalculatedValue). De lo contrario, se puede causar un resultado inesperado o una excepción. Si el usuario necesita cambiar otros datos que no sean el resultado calculado en la implementación para algunas funciones personalizadas, por ejemplo, cambiar la fórmula de la celda, el estilo, …etc., el usuario debe reunir esos datos en esta implementación y cambiarlos fuera del alcance del cálculo de la fórmula.
Constructores
AbstractCalculationEngine()
protected AbstractCalculationEngine()
Propiedades
IsParamArrayModeRequired
Indica si este motor necesita que el parámetro se calcule en modo de matriz. El valor predeterminado es falso. Si Aspose.Cells.CalculationData.GetParamValueInArrayMode(System.Int32,System.Int32,System.Int32) es requerido al calcular funciones personalizadas y el usuario no ha actualizado la definición para ellas (por Aspose.Cells.Workbook.UpdateCustomFunctionDefinition(Aspose.Cells.CustomFunctionDefinition)), esta propiedad debe establecerse como verdadera.
public virtual bool IsParamArrayModeRequired { get; }
Valor de la propiedad
Observaciones
Si este motor de cálculo personalizado necesita que el parámetro se calcule en modo de matriz, se requerirán más pilas para almacenar en caché el árbol de parámetros y el método Calculate() puede ser llamado recursivamente para calcular el valor del parámetro. Por consideración de rendimiento, mantenga esta propiedad con el valor predeterminado (falso) si no hay un requisito especial.
IsParamLiteralRequired
Indica si este motor necesita el texto literal del parámetro al realizar el cálculo. El valor predeterminado es falso.
public virtual bool IsParamLiteralRequired { get; }
Valor de la propiedad
Observaciones
Si este motor de cálculo personalizado necesita el texto literal del parámetro, se requerirán más pilas para almacenar en caché el texto literal de los parámetros y el método Calculate() puede ser llamado recursivamente para calcular el valor del parámetro. Generalmente, el texto literal no es necesario para calcular fórmulas y esta propiedad debe mantenerse como falsa para la mayoría de las implementaciones para obtener un mejor rendimiento.
ProcessBuiltInFunctions
Indica si las funciones integradas que han sido soportadas por el motor integrado deben ser verificadas y procesadas por esta implementación. El valor predeterminado es falso.
public virtual bool ProcessBuiltInFunctions { get; }
Valor de la propiedad
Observaciones
Si el usuario necesita cambiar la lógica de cálculo de algunas funciones integradas, esta propiedad debe establecerse como verdadera. De lo contrario, deje esta propiedad como falsa por consideración de rendimiento.
Métodos
Calculate(CalculationData)
Calcula una función con los datos dados.
public abstract void Calculate(CalculationData data)
Parámetros
data
CalculationData
los datos requeridos para calcular la función, como el nombre de la función, parámetros, …etc.
Observaciones
El usuario debe establecer el valor calculado para los datos dados para todas las funciones (incluidas las funciones nativas de Excel) que desea calcular por sí mismo en esta implementación.
ForceRecalculate(string)
Indica si se debe forzar a que la función dada sea recalculada siempre al calcular fórmulas compartidas.
public virtual bool ForceRecalculate(string functionName)
Parámetros
functionName
string
nombre de la función. Generalmente es el nombre de la función personalizada. Si Aspose.Cells.AbstractCalculationEngine.ProcessBuiltInFunctions es verdadero, entonces las funciones integradas también serán verificadas aquí.
Retorna
verdadero si la función especificada necesita ser recalculada siempre.
Observaciones
Para fórmulas compartidas, múltiples celdas comparten la misma función. Si los parámetros de la función permanecen iguales para esas celdas también, entonces generalmente esta función necesita ser calculada solo una vez. Así que, por consideración de rendimiento, solo calculamos este tipo de función una vez también (Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) se llama solo una vez, en lugar de ser llamado repetidamente para cada celda). Sin embargo, para la implementación personalizada del usuario, puede que la función, especialmente la función personalizada, necesite ser calculada de manera diferente para diferentes celdas. Si es así, el usuario necesita sobrescribir este método para hacerlo devolver verdadero para la función. Y para Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData), el Aspose.Cells.CalculationData.CalculatedValue dado puede haber sido inicializado con el valor en caché del cálculo anterior.
SkipCalculation()
protected void SkipCalculation()