Moyens de calculer les formules

Introduction

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

Ajout de formules et calcul de résultats

Aspose.Cells prend en charge la plupart des formules ou fonctions qui font partie de Microsoft Excel. Ils peuvent être utilisés via l’API ou en utilisant des feuilles de calcul. Aspose.Cells prend en charge un vaste ensemble de formules mathématiques, de chaînes, booléennes, date/heure, statistiques, de recherche et de référence.

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

Pour calculer les résultats des formules, appelez la méthode Workbook.CalculateFormula() qui traite toutes les formules intégrées dans un fichier Excel. Veuillez consulter le code d’exemple suivant qui ajoute la formule et calcule ses résultats. Veuillez vérifier le fichier Excel de sortie généré avec ce code.

Code d’exemple

Aspose::Cells::Startup();
//For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-C
//Output directory path
U16String outPath(u"..\\Data\\Output\\");
//Path of output excel file
U16String outputAddingFormulasAndCalculatingResults = outPath + u"outputAddingFormulasAndCalculatingResults.xlsx";
//Create workbook
Workbook wb;
//Access first worksheet in the workbook
Worksheet ws = wb.GetWorksheets().Get(0);
//Adding integer values to cells A1, A2 and A3
ws.GetCells().Get(u"A1").PutValue(10);
ws.GetCells().Get(u"A2").PutValue(20);
ws.GetCells().Get(u"A3").PutValue(70);
//Adding a SUM formula to "A4" cell
ws.GetCells().Get(u"A4").SetFormula(u"=SUM(A1:A3)");
//Calculating the results of formulas
wb.CalculateFormula();
//Get the calculated value of the cell
U16String strVal = ws.GetCells().Get(u"A4").GetStringValue();
//Print the calculated value on console
std::cout << "Calculated Result: " << strVal.ToUtf8() <<std::endl;
//Saving the workbook
wb.Save(outputAddingFormulasAndCalculatingResults);
Aspose::Cells::Cleanup();

Calcul des formules une seule fois

Lorsque Workbook.CalculateFormula() est appelé pour calculer les valeurs des formules dans un modèle de classeur, Aspose.Cells crée une chaîne de calcul. Cela augmente les performances lorsque les formules sont calculées pour la deuxième ou la troisième fois.

Cependant, si le modèle contient beaucoup de formules, le calcul de la formule la première fois peut consommer beaucoup de temps de traitement CPU et de mémoire.

Aspose.Cells vous permet de désactiver la création d’une chaîne de calcul, ce qui est utile lorsque vous voulez calculer les formules une seule fois.

Veuillez appeler Workbook.GetISettings().SetCreateCalcChain() avec le paramètre false. Vous pouvez utiliser le fichier Excel fourni pour tester ce code.

Code d’exemple

Aspose::Cells::Startup();
//For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-C
//Source directory path
U16String dirPath(u"..\\Data\\Formulas\\");
//Path of input excel file
U16String sampleCalculatingFormulasOnceOnly = dirPath + u"sampleCalculatingFormulasOnceOnly.xlsx";
//Create workbook
Workbook wb(sampleCalculatingFormulasOnceOnly);
//Set the CreateCalcChain as false
wb.GetSettings().GetFormulaSettings().SetEnableCalculationChain(false);
//Get the time before formula calculationint
auto startTime = std::chrono::system_clock::now();
//Calculate the workbook formulas
wb.CalculateFormula();
//Get the time after formula calculation
auto interval = std::chrono::system_clock::now() - startTime;
long long time = std::chrono::duration_cast<std::chrono::milliseconds>(interval).count();
std::cout << "Workbook Formula Calculation Elapsed Time in Milliseconds: " << time << std::endl;
Aspose::Cells::Cleanup();