Calculer des formules

Ajout de formules et calcul des résultats

Aspose.Cells dispose d’un moteur de calcul de formule 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 au moment de l’exécution.

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

Utilisez leFormule propriété ouDéfinirFormule(…) les méthodes deCellclasse pour ajouter une formule à une cellule. Lorsque vous appliquez 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 leCalculerFormule méthode de laCahierclasse qui traite toutes les formules incorporées dans un fichier Excel. Ou, l’utilisateur peut appeler leCalculerFormule méthode de laFeuille de travail classe qui traite toutes les formules incorporées dans une feuille. Ou, l’utilisateur peut également appeler leCalculer méthode de laCellclasse qui traite la formule d’un Cell :

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(CalculatingFormulas.class) + "formulas/";
// Instantiating a Workbook object
Workbook workbook = new Workbook();
// Adding a new worksheet to the Excel object
int sheetIndex = workbook.getWorksheets().add();
// Obtaining the reference of the newly added worksheet by passing its sheet index
Worksheet worksheet = workbook.getWorksheets().get(sheetIndex);
// Adding a value to "A1" cell
worksheet.getCells().get("A1").putValue(1);
// Adding a value to "A2" cell
worksheet.getCells().get("A2").putValue(2);
// Adding a value to "A3" cell
worksheet.getCells().get("A3").putValue(3);
// Adding a SUM formula to "A4" cell
worksheet.getCells().get("A4").setFormula("=SUM(A1:A3)");
// Calculating the results of formulas
workbook.calculateFormula();
// Get the calculated value of the cell
String value = worksheet.getCells().get("A4").getStringValue();
// Saving the Excel file
workbook.save(dataDir + "CalculatingFormulas_out.xls");

Important à savoir

Calcul direct de la formule

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

Parfois, vous devez calculer directement les résultats de la formule sans les ajouter dans 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 Excel Microsoft sans ajouter la formule dans une feuille de calcul.

Vous pouvez utiliser les API du moteur de calcul de formule Aspose.Cells pourFeuille de travail àcalculer les résultats de ces 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-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(DirectCalculationFormula.class) + "formulas/";
// Create a workbook
Workbook workbook = new Workbook();
// Access first worksheet
Worksheet worksheet = workbook.getWorksheets().get(0);
// Put 20 in cell A1
Cell cellA1 = worksheet.getCells().get("A1");
cellA1.putValue(20);
// Put 30 in cell A2
Cell cellA2 = worksheet.getCells().get("A2");
cellA2.putValue(30);
// Calculate the Sum of A1 and A2
Object results = worksheet.calculateFormula("=Sum(A1:A2)");
// Print the output
System.out.println("Value of A1: " + cellA1.getStringValue());
System.out.println("Value of A2: " + cellA2.getStringValue());
System.out.println("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

Calculer des formules à plusieurs reprises

Lorsqu’il y a beaucoup de formules dans le classeur et que l’utilisateur doit les calculer à plusieurs reprises en n’en modifiant qu’une petite partie, 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-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(CalculatingFormulasOnce.class) + "formulas/";
// Load the template workbook
Workbook workbook = new Workbook(dataDir + "book1.xls");
// Print the time before formula calculation
System.out.println(DateTime.getNow());
// Set the CreateCalcChain as true
workbook.getSettings().getFormulaSettings().setEnableCalculationChain(true);
// Calculate the workbook formulas
workbook.calculateFormula();
Cells cells = workbook.getWorksheets().get("Sheet1").getCells();
//with original values, the calculated result
System.out.println(cells.get("A11").getValue());
//update one value the formula depends on
cells.get("A5").putValue(15);
// Calculate the workbook formulas again, in fact only A11 needs to be and will be calculated
workbook.calculateFormula();
//check the re-calculated value
System.out.println(cells.get("A11").getValue());
// Print the time after formula calculation
System.out.println(DateTime.getNow());

Important à savoir

Sujets avancés