Implémenter un moteur de calcul personnalisé pour étendre le moteur de calcul par défaut de Aspose.Cells
Implémenter un moteur de calcul personnalisé
Aspose.Cells dispose d’un puissant moteur de calcul capable de calculer la quasi-totalité des formules Excel Microsoft. Malgré cela, il vous permet également d’étendre le moteur de calcul par défaut qui vous offre plus de puissance et de flexibilité.
La propriété et les classes suivantes sont utilisées pour implémenter cette fonctionnalité.
- CalculationOptions.CustomEngine
- AbstractCalculationEngine
- [Données de calcul] (https://reference.aspose.com/cells/net/aspose.cells/calculationdata)
Le code suivant implémente le moteur de calcul personnalisé. Il implémente l’interface**AbstractCalculationEngine** qui a un**[Calculer (données de calcul)] (https://reference.aspose.com/cells/net/aspose.cells/abstractcalculationengine/methods/calculate)** méthode. Cette méthode est appelée sur toutes vos formules. Dans cette méthode, nous capturons le**Somme** formule et augmente sa valeur de 30. Ainsi, si la valeur calculée Aspose.Cells est de 20, notre moteur personnalisé la rendra de 50 en ajoutant 30.
Exemple de programmation
// 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(); | |
} | |
} |
Sortie console
Voici la sortie console de l’exemple de code ci-dessus.
Without Custom Engine Value of A1: 20
With Custom Engine Value of A1: 50