Calcul des formules

Ajout de formules et calcul de résultats

Aspose.Cells dispose d’un moteur de calcul de formules intégré. Non seulement il peut recalculer les formules importées à partir de modèles de concepteur, mais il prend également en charge le calcul des résultats des formules ajoutées à l’exécution.

Aspose.Cells prend en charge la plupart des fonctions ou formules qui font partie de Microsoft Excel (Lire une liste des fonctions prises en charge par le moteur de calcul). Ces fonctions peuvent être utilisées via les API ou des feuilles de calcul de concepteur. Aspose.Cells prend en charge un large ensemble de formules mathématiques, de chaînes, booléennes, date/heure, statistiques, de base de données, de recherche et de référence.

Utilisez la propriété Formula ou les méthodes SetFormula(…) de la classe Cell pour ajouter une formule à une cellule. Lors de l’application d’une formule, commencez toujours la chaîne par un signe égal (=) comme vous le faites lors de la création d’une formule dans Microsoft Excel et utilisez une virgule (,) pour délimiter les paramètres de la fonction.

Pour calculer les résultats des formules, l’utilisateur peut appeler la méthode CalculateFormula de la classe Workbook qui traite toutes les formules intégrées dans un fichier Excel. Ou bien, l’utilisateur peut appeler la méthode CalculateFormula de la classe Worsheet qui traite toutes les formules intégrées dans une feuille. Ou encore, l’utilisateur peut appeler la méthode Calculate de la classe Cell qui traite la formule d’une cellule :

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
// Create directory if it is not already present.
bool IsExists = System.IO.Directory.Exists(dataDir);
if (!IsExists)
System.IO.Directory.CreateDirectory(dataDir);
// Instantiating a Workbook object
Workbook workbook = new Workbook();
// Adding a new worksheet to the Excel object
int sheetIndex = workbook.Worksheets.Add();
// Obtaining the reference of the newly added worksheet by passing its sheet index
Worksheet worksheet = workbook.Worksheets[sheetIndex];
// Adding a value to "A1" cell
worksheet.Cells["A1"].PutValue(1);
// Adding a value to "A2" cell
worksheet.Cells["A2"].PutValue(2);
// Adding a value to "A3" cell
worksheet.Cells["A3"].PutValue(3);
// Adding a SUM formula to "A4" cell
worksheet.Cells["A4"].Formula = "=SUM(A1:A3)";
// Calculating the results of formulas
workbook.CalculateFormula();
// Get the calculated value of the cell
string value = worksheet.Cells["A4"].Value.ToString();
// Saving the Excel file
workbook.Save(dataDir + "output.xls");

Important à savoir pour les formules

Calcul direct de formule

Aspose.Cells possède un moteur de calcul de formules intégré. En plus de calculer les formules importées à partir d’un fichier, Aspose.Cells peut calculer les résultats des formules directement.

Parfois, vous devez calculer directement les résultats des formules sans les ajouter à une feuille de calcul. Les valeurs des cellules utilisées dans la formule existent déjà dans une feuille de calcul et tout ce dont vous avez besoin est de trouver le résultat de ces valeurs en fonction d’une formule Microsoft Excel sans ajouter la formule dans une feuille de calcul.

Vous pouvez utiliser les API du moteur de calcul de formules Aspose.Cells pour Worksheet à calculate les résultats de telles formules sans les ajouter à la feuille de calcul :

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
// Create directory if it is not already present.
bool IsExists = System.IO.Directory.Exists(dataDir);
if (!IsExists)
System.IO.Directory.CreateDirectory(dataDir);
// Create a workbook
Workbook workbook = new Workbook();
// Access first worksheet
Worksheet worksheet = workbook.Worksheets[0];
// Put 20 in cell A1
Cell cellA1 = worksheet.Cells["A1"];
cellA1.PutValue(20);
// Put 30 in cell A2
Cell cellA2 = worksheet.Cells["A2"];
cellA2.PutValue(30);
// Calculate the Sum of A1 and A2
var results = worksheet.CalculateFormula("=Sum(A1:A2)");
// Print the output
System.Console.WriteLine("Value of A1: " + cellA1.StringValue);
System.Console.WriteLine("Value of A2: " + cellA2.StringValue);
System.Console.WriteLine("Result of Sum(A1:A2): " + results.ToString());

Le code ci-dessus produit la sortie suivante :

Value of A1: 20
Value of A2: 30
Result of Sum(A1:A2): 50.0

Comment calculer des formules de manière répétée

Lorsqu’il y a beaucoup de formules dans le classeur et que l’utilisateur doit les calculer de manière répétée en modifiant seulement une petite partie d’entre elles, il peut être utile pour les performances d’activer la chaîne de calcul des formules : FormulaSettings.EnableCalculationChain.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
// Load the template workbook
Workbook workbook = new Workbook(dataDir + "book1.xls");
// Print the time before formula calculation
Console.WriteLine(DateTime.Now);
// Set the CreateCalcChain as tue
workbook.Settings.FormulaSettings.EnableCalculationChain = true;
// Calculate the workbook formulas
workbook.CalculateFormula();
// Print the time after formula calculation
Console.WriteLine(DateTime.Now);
//change the value of one cell
workbook.Worksheets[0].Cells["A1"].PutValue("newvalue");
//re-calculate those formulas which depend on cell A1
workbook.CalculateFormula();

Important à savoir

Sujets avancés