Calculer les formules avec Node.js via C++

Ajout de formules et calcul de résultats

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 conception, mais également supporter le calcul des résultats des formules ajoutées en temps réel.

Aspose.Cells supporte la plupart des formules ou fonctions qui font partie de Microsoft Excel (lisez une liste des fonctions prises en charge par le moteur de calcul). Ces fonctions peuvent être utilisées via les API ou la création de feuilles de calcul. Aspose.Cells supporte un vaste ensemble de formules mathématiques, de chaînes, logiques, date/heure, statistiques, bases de données, recherche et référence.

Utilisez la propriété getFormula() ou les méthodes setFormula(string, object) 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 lors de la création d’une formule dans Microsoft Excel, et utilisez une virgule (,) pour délimiter les paramètres des fonctions.

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, l’utilisateur peut appeler la méthode calculateFormula(string) de la classe Worksheet qui traite toutes les formules d’une feuille. Ou, l’utilisateur peut aussi appeler la méthode calculate(CalculationOptions) de la classe Cell qui traite la formule d’une seule cellule :

const path = require("path");
const fs = require("fs");
const AsposeCells = require("aspose.cells.node");

// The path to the documents directory.
const dataDir = path.join(__dirname, "data");

// Instantiating a Workbook object
const workbook = new AsposeCells.Workbook();

// Adding a new worksheet to the Excel object
const sheetIndex = workbook.getWorksheets().add();

// Obtaining the reference of the newly added worksheet by passing its sheet index
const 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
const value = worksheet.getCells().get("A4").getValue().toString();

// Saving the Excel file
workbook.save(path.join(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 souhaitez calculer directement les résultats des formules sans les ajouter dans une feuille de calcul. Les valeurs des cellules utilisées dans la formule existent déjà dans une feuille, et tout ce que vous avez à faire est de trouver le résultat de ces valeurs en utilisant une formule Microsoft Excel sans ajouter la formule dans une feuille.

Vous pouvez utiliser les API du moteur de calcul de formules d’Aspose.Cells pour Worksheet à calculateFormula(string, FormulaParseOptions, CalculationOptions, number, number, CalculationData) pour obtenir les résultats de telles formules sans les ajouter dans la feuille :

const path = require("path");
const AsposeCells = require("aspose.cells.node");

// The path to the documents directory.
const dataDir = path.join(__dirname, "data");

// Create a workbook
const workbook = new AsposeCells.Workbook();

// Access first worksheet
const worksheet = workbook.getWorksheets().get(0);

// Put 20 in cell A1
const cellA1 = worksheet.getCells().get("A1");
cellA1.putValue(20);

// Put 30 in cell A2
const cellA2 = worksheet.getCells().get("A2");
cellA2.putValue(30);

// Calculate the Sum of A1 and A2
const results = worksheet.calculateFormula("=Sum(A1:A2)");

// Print the output
console.log("Value of A1: " + cellA1.getStringValue());
console.log("Value of A2: " + cellA2.getStringValue());
console.log("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 à plusieurs reprises en modifiant uniquement une petite partie d’entre elles, il peut être utile pour la performance d’activer la chaîne de calcul des formules : formulaSettings.getEnableCalculationChain().

const path = require("path");
const AsposeCells = require("aspose.cells.node");

// The path to the documents directory.
const dataDir = path.join(__dirname, "data");
// Load the template workbook
const workbook = new AsposeCells.Workbook(path.join(dataDir, "book1.xls"));

// Print the time before formula calculation
console.log(new Date());

// Set the CreateCalcChain as true
workbook.getSettings().getFormulaSettings().setEnableCalculationChain(true);

// Calculate the workbook formulas
workbook.calculateFormula();

// Print the time after formula calculation
console.log(new Date());

// Change the value of one cell
workbook.getWorksheets().get(0).getCells().get("A1").putValue("newvalue");

// Re-calculate those formulas which depend on cell A1
workbook.calculateFormula();

Important à savoir

Sujets avancés