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 :

  1. Constructeur de cellule — ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula proprié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.

ObjectifChaîne de formuleRemarques
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 :

LigneFormuleRé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

 Français