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(); |