Travailler avec les formules
Vue d’ensemble
Aspose.Cells FOSS stocke les formules sous forme de chaînes compatibles Excel. La bibliothèque n’évalue pas les formules en interne — elle préserve l’expression telle quelle dans le fichier, et l’application de feuille de calcul (Excel, LibreOffice Calc ou tout lecteur compatible) calcule le résultat lorsque le fichier est ouvert.
Il existe deux façons 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 du constructeur est compacte lorsque vous êtes
en train de créer une feuille à partir de zéro ; la forme de la 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 de cellule
La signature du constructeur Cell est Cell(value, formula). Pour créer une cellule de formule pure,
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")Définir value=None rend explicite que la cellule n’a aucune valeur statique — son contenu affiché provient entièrement de la formule. Passer une valeur non-None avec 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 la propriété .formula
Attribuez 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")Lecture d’une formule à l’envers
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 toute valeur statique (le cas échéant) qui a été 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
mise en cache aux côtés des formules, .value peut renvoyer le dernier résultat mis en cache — mais ce
comportement dépend de la façon dont l’application d’origine a enregistré le fichier et ne doit
pas être utilisé pour des calculs frais.
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 |
| Compter les cellules numériques | =COUNT(A1:A10) | Compte uniquement les cellules contenant des valeurs numériques |
| Compter 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ée |
| Concaténer des chaînes | =CONCATENATE(A1," ",B1) | Ou utilisez =A1&" "&B1 |
| Arrondir un nombre | =ROUND(A1,2) | Le deuxième argument indique 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 |
Notes
Les chaînes de formule doivent commencer par =
La bibliothèque stocke la chaîne telle quelle. Omettre le préfixe = fait que le lecteur de feuille de calcul traite 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 de lignes‑colonnes sont écrites sous la forme FirstCell:LastCell en utilisant des lettres de colonne majuscules et des numéros de ligne à base 1 : "A1:A10", "B2:D5", "C3:C3". La bibliothèque FOSS ne traduit pas ou ne valide pas la chaîne de plage — une plage invalide sera stockée littéralement et provoquera une erreur dans le lecteur de feuille de calcul à l’ouverture.
Les formules sont stockées sous forme de chaînes, pas évaluées
Aspose.Cells FOSS n’inclut pas de moteur de formules. Si vous avez besoin du résultat calculé d’une formule en Python (par exemple, pour effectuer d’autres calculs), calculez la valeur vous‑même et écrivez‑la comme une valeur statique avec .value. Utilisez les formules uniquement lorsque l’utilisateur final ouvrira le fichier dans une application de tableur capable de les évaluer.
Voir aussi
- Référence de l’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
- Démarrage / Installation : Installation via pip et configuration
- Blog : Présentation d’Aspose.Cells FOSS : Vue d’ensemble de la bibliothèque et démarrage rapide