Implementar el motor de cálculo personalizado para ampliar el motor de cálculo predeterminado de Aspose.Cells
Implementar motor de cálculo personalizado
Aspose.Cells tiene un potente motor de cálculo que puede calcular casi todas las fórmulas de Excel Microsoft. A pesar de ello, también te permite ampliar el motor de cálculo predeterminado lo que te proporciona mayor potencia y flexibilidad.
Las siguientes propiedades y clases se utilizan para implementar esta función.
- Opciones de cálculo.Motor personalizado
- [Motor de cálculo abstracto] (https://reference.aspose.com/cells/net/aspose.cells/abstractcalculationengine)
- Datos de cálculo
El código siguiente implementa el motor de cálculo personalizado. Implementa la interfaz**[Motor de cálculo abstracto] (https://reference.aspose.com/cells/net/aspose.cells/abstractcalculationengine)** que tiene un**[Calcular (datos de CalculationData)] (https://reference.aspose.com/cells/net/aspose.cells/abstractcalculationengine/methods/calculate)** método. Este método se llama contra todas sus fórmulas. Dentro de este método, capturamos el**Suma** fórmula y aumenta su valor en 30. Entonces, si el valor calculado Aspose.Cells es 20, nuestro motor personalizado lo convertirá en 50 al agregar 30.
Ejemplo de programación
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// Create a new class derived from AbstractCalculationEngine | |
class CustomEngine : AbstractCalculationEngine | |
{ | |
// Override the Calculate method with custom logic | |
public override void Calculate(CalculationData data) | |
{ | |
// Check the forumla name and change the implementation | |
if (data.FunctionName.ToUpper() == "TODAY") | |
{ | |
// Assign the CalculationData.CalculatedValue: add one day offset for the date | |
data.CalculatedValue = CellsHelper.GetDoubleFromDateTime(DateTime.Today, false) + 1.0; | |
} | |
} | |
public override bool ProcessBuiltInFunctions { get { return true; } } | |
} | |
class ImplementCustomCalculationEngine | |
{ | |
public static void Run() | |
{ | |
// Create an instance of Workbook | |
Workbook workbook = new Workbook(); | |
// Access first Worksheet from the collection | |
Worksheet sheet = workbook.Worksheets[0]; | |
// Access Cell A1 and put a formula to sum values of B1 to B2 | |
Cell a1 = sheet.Cells["A1"]; | |
Style style = a1.GetStyle(); | |
style.Number = 14; | |
a1.SetStyle(style); | |
a1.Formula = "=TODAY()"; | |
// Calculate all formulas in the Workbook | |
workbook.CalculateFormula(); | |
// The result of A1 should be 20 as per default calculation engine | |
Console.WriteLine("The value of A1 with default calculation engine: " + a1.StringValue); | |
// Create an instance of CustomEngine | |
CustomEngine engine = new CustomEngine(); | |
// Create an instance of CalculationOptions | |
CalculationOptions opts = new CalculationOptions(); | |
// Assign the CalculationOptions.CustomEngine property to the instance of CustomEngine | |
opts.CustomEngine = engine; | |
// Recalculate all formulas in Workbook using the custom calculation engine | |
workbook.CalculateFormula(opts); | |
// The result of A1 will be 50 as per custom calculation engine | |
Console.WriteLine("The value of A1 with custom calculation engine: " + a1.StringValue); | |
Console.WriteLine("Press any key to continue..."); | |
Console.ReadKey(); | |
} | |
} |
Salida de consola
Aquí está la salida de la consola del código de muestra anterior.
Without Custom Engine Value of A1: 20
With Custom Engine Value of A1: 50