Travailler avec les formules
Vue d’ensemble
Aspose.Cells FOSS stores formulas as Excel-compatible strings. The library does not evaluate formulas internally — it preserves the expression verbatim in the file, and the spreadsheet application (Excel, LibreOffice Calc, or any compatible reader) computes the result when the file is opened.
Il existe deux manières d’insérer une formule dans une cellule :
- Constructeur de cellule —
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)") .formulapropriété —ws.cells["A4"].formula = "=SUM(A1:A3)"
Les deux approches stockent les mêmes données. La forme constructeur est compacte lorsque vous créez une feuille à partir de zéro ; la forme propriété est plus naturelle lorsque vous avez déjà une référence à une cellule existante et que vous souhaitez y attacher une formule.
Définir une formule via le constructeur Cell
Le Cell la signature du constructeur est Cell(value, formula). Pour créer un pur cellule de formule, passez None comme valeur et la chaîne d’expression comme deuxième argument :
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##Input values
ws.cells["A1"] = Cell(10)
ws.cells["A2"] = Cell(25)
ws.cells["A3"] = Cell(15)
##Formula cell: value=None, formula="=SUM(A1:A3)"
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
workbook.save("formula_constructor.xlsx")
print("Saved formula_constructor.xlsx")Paramètre value=None rend explicite le fait que la cellule n’a pas de valeur statique — son le contenu affiché provient entièrement de la formule. Passer un non-None valeur en même temps qu’une formule est autorisé mais inhabituel ; la plupart des lecteurs de feuilles de calcul afficheront le résultat de la formule et ignoreront la valeur stockée.
Définir une formule via le .formula Propriété
Attribuer directement à cell.formula lorsque vous avez déjà une référence de cellule ou lorsque vous souhaitez ajouter une formule à une cellule qui a été précédemment remplie avec une valeur :
from aspose.cells_foss import Workbook
workbook = Workbook()
ws = workbook.worksheets[0]
##Write input data
for i, val in enumerate([4, 8, 15, 16, 23], start=1):
ws.cells[f"A{i}"].value = val
##Attach a formula to an existing cell reference
cell = ws.cells["B1"]
cell.formula = "=AVERAGE(A1:A5)"
##Or assign directly by address
ws.cells["B2"].formula = "=MAX(A1:A5)"
ws.cells["B3"].formula = "=MIN(A1:A5)"
workbook.save("formula_property.xlsx")
print("Saved formula_property.xlsx")Lire une formule
Après avoir écrit une cellule de formule, utilisez .formula pour récupérer la chaîne d’expression et .value pour récupérer la valeur statique (le cas échéant) qui était stockée à côté.
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
ws.cells["A1"] = Cell(None, "=SUM(B1:B5)")
cell = ws.cells["A1"]
print(cell.formula) # =SUM(B1:B5)
print(cell.value) # None (no static value was set)En pratique, .value est None pour toute cellule créée avec Cell(None, formula). Si vous chargez un classeur existant qui a été précédemment enregistré avec des valeurs calculées mis en cache à côté des formules, .value peut renvoyer le dernier résultat mis en cache — mais cela le comportement dépend de la façon dont l’application d’origine a enregistré le fichier et devrait ne pas être considéré comme fiable pour des calculs récents.
Pour distinguer une cellule de formule d’une cellule à valeur simple à l’exécution :
cell = ws.cells["A1"]
if cell.formula:
print(f"Formula cell: {cell.formula}")
else:
print(f"Value cell: {cell.value}")Formules Excel courantes
Le tableau suivant répertorie les fonctions Excel les plus utilisées avec des chaînes de formules d’exemple que vous pouvez transmettre directement à Aspose.Cells FOSS.
| Objectif | Chaîne de formule | Remarques |
|---|---|---|
| Somme d’une plage | =SUM(A1:A10) | Ajoute toutes les valeurs numériques de la plage |
| Moyenne d’une plage | =AVERAGE(A1:A10) | Ignore les cellules vides |
| Valeur maximale | =MAX(A1:A10) | Renvoie le plus grand nombre |
| Valeur minimale | =MIN(A1:A10) | Renvoie le plus petit nombre |
| Compte les cellules numériques | =COUNT(A1:A10) | Compte les cellules contenant uniquement des valeurs numériques |
| Compte les cellules non vides | =COUNTA(A1:A10) | Compte toute cellule non vide |
| Valeur conditionnelle | =IF(A1>100,"High","Low") | Forme à trois arguments : test, résultat‑vrai, résultat‑faux |
| Recherche verticale | =VLOOKUP(D1,A1:B10,2,FALSE) | Correspondance exacte (FALSE) recommandé |
| Concaténer des chaînes | =CONCATENATE(A1," ",B1) | Ou utilisez =A1&" "&B1 |
| Arrondir un nombre | =ROUND(A1,2) | Le deuxième argument est le nombre de décimales |
Toutes les chaînes de formule doivent commencer par =. Les noms de fonctions ne sont pas sensibles à la casse dans les fichiers compatibles Excel, mais la forme majuscule conventionnelle est affichée ci-dessus pour la lisibilité.
Exemple complet
L’exemple suivant crée un jeu de données de cinq lignes de valeurs numériques dans la colonne A, puis écrit les formules SUM, AVERAGE, MAX et MIN dans la colonne B, et enregistre le résultat dans un fichier XLSX.
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##--- Headers ---
ws.cells["A1"].value = "Value"
ws.cells["B1"].value = "Formula"
ws.cells["C1"].value = "Result (evaluated by Excel)"
##--- Input data in A2:A6 ---
input_values = [14, 28, 7, 35, 21]
for i, val in enumerate(input_values, start=2):
ws.cells[f"A{i}"].value = val
##--- Formula labels in B column ---
ws.cells["B2"].value = "SUM"
ws.cells["B3"].value = "AVERAGE"
ws.cells["B4"].value = "MAX"
ws.cells["B5"].value = "MIN"
##--- Formulas in C column ---
ws.cells["C2"] = Cell(None, "=SUM(A2:A6)")
ws.cells["C3"] = Cell(None, "=AVERAGE(A2:A6)")
ws.cells["C4"] = Cell(None, "=MAX(A2:A6)")
ws.cells["C5"] = Cell(None, "=MIN(A2:A6)")
##--- Save ---
workbook.save("formulas_demo.xlsx")
print("Saved formulas_demo.xlsx")Lorsque ce fichier est ouvert dans Excel ou LibreOffice Calc, la colonne C affichera :
| Ligne | Formule | Résultat attendu |
|---|---|---|
| C2 | =SUM(A2:A6) | 105 |
| C3 | =AVERAGE(A2:A6) | 21 |
| C4 | =MAX(A2:A6) | 35 |
| C5 | =MIN(A2:A6) | 7 |
Remarques
Les chaînes de formule doivent commencer par =
La bibliothèque stocke la chaîne telle quelle. Omettre le caractère initial = provoque le lecteur de feuille de calcul pour traiter le texte comme une chaîne littérale plutôt que comme une formule.
##Correct — starts with =
ws.cells["A1"].formula = "=SUM(B1:B5)"
##Wrong — treated as the literal text "SUM(B1:B5)", not a formula
ws.cells["A1"].formula = "SUM(B1:B5)"Les références de plage utilisent la notation standard Excel A1
Les plages ligne-colonne sont écrites comme FirstCell:LastCell en utilisant des lettres de colonne majuscules et des numéros de ligne à base 1 : "A1:A10", "B2:D5", "C3:C3". Le FOSS bibliothèque ne traduit pas et ne valide pas la chaîne de plage — une plage invalide sera stockée telle quelle et provoquera une erreur dans le lecteur de feuille de calcul lors de l’ouverture.
Les formules sont stockées sous forme de chaînes, non évaluées
Aspose.Cells FOSS does not include a formula engine. If you need the computed résultat d’une formule dans Python (par exemple, pour effectuer d’autres calculs), calculez vous‑même la valeur et écrivez‑la comme une valeur statique avec .value. Utilisez des formules uniquement lorsque l’utilisateur final ouvrira le fichier dans une application de feuille de calcul qui peut les évaluer.
Voir aussi
- Référence API: Documentation complète des classes et méthodes pour
aspose.cells_foss - Base de connaissances: Guides pratiques orientés tâches
- Vue d’ensemble du produit: Résumé des fonctionnalités et capacités
- Premiers pas / Installation: installation et configuration avec pip
- Blog : Présentation de Aspose.Cells FOSS: Aperçu de la bibliothèque et démarrage rapide