Treballant amb fórmules

Visió general

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.

Hi ha dues maneres de col·locar una fórmula en una cel·la:

  1. Constructor de cel·la — ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula propietat — ws.cells["A4"].formula = "=SUM(A1:A3)"

Ambdues aproximacions emmagatzemen les mateixes dades. La forma del constructor és compacta quan esteu construint un full des de zero; la forma de la propietat és més natural quan ja teniu una referència a una cel·la existent i voleu adjuntar-hi una fórmula.


Establint una fórmula mitjançant el constructor Cell

El Cell la signatura del constructor és Cell(value, formula). Per crear una pura cel·la de fórmula, passa None com a valor i la cadena d’expressió com a segon 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")

Configuració value=None fa explícit que la cel·la no té cap valor estàtic — el seu el contingut mostrat prové completament de la fórmula. Passar un no-None valor al costat d’una fórmula està permès però és inusual; la majoria de lectors de fulls de càlcul mostraran el resultat de la fórmula i ignoraran el valor emmagatzemat.


Establint una fórmula mitjançant el .formula Propietat

Assigna directament a cell.formula quan ja tens una referència a una cel·la o quan vols afegir una fórmula a una cel·la que prèviament s’havia escrit amb un valor:

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")

Llegint una fórmula de tornada

Després d’escriure una cel·la de fórmula, utilitza .formula per recuperar la cadena d’expressió i .value per recuperar qualsevol valor estàtic (si n’hi ha) que s’hagi emmagatzemat al seu costat.

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 la pràctica, .value és None per a qualsevol cel·la creada amb Cell(None, formula). Si carregues un llibre de treball existent que s’havia desat prèviament amb valors calculats emmagatzemats en caché al costat de les fórmules, .value pot retornar l’últim resultat emmagatzemat en caché — però això el comportament depèn de com l’aplicació d’origen ha desat el fitxer i hauria de no ser de confiança per a càlculs nous.

Per distingir una cel·la de fórmula d’una cel·la de valor simple en temps d’execució:

cell = ws.cells["A1"]
if cell.formula:
    print(f"Formula cell: {cell.formula}")
else:
    print(f"Value cell: {cell.value}")

Fórmules d’Excel comunes

La taula següent enumera les funcions d’Excel més utilitzades amb cadenes de fórmules d’exemple que podeu passar directament a Aspose.Cells FOSS.

PropòsitCadena de fórmulaNotes
Suma d’un interval=SUM(A1:A10)Afegeix tots els valors numèrics a l’interval
Mitjana d’un interval=AVERAGE(A1:A10)Ignora les cel·les buides
Valor màxim=MAX(A1:A10)Retorna el nombre més gran
Valor mínim=MIN(A1:A10)Retorna el nombre més petit
Compta les cel·les numèriques=COUNT(A1:A10)Compta les cel·les només amb valors numèrics
Compta les cel·les no buides=COUNTA(A1:A10)Compta qualsevol cel·la no buida
Valor condicional=IF(A1>100,"High","Low")Forma de tres arguments: prova, resultat-vertader, resultat-fals
Cerca vertical=VLOOKUP(D1,A1:B10,2,FALSE)Coincidència exacta (FALSE) recomanat
Concatenar cadenes=CONCATENATE(A1," ",B1)O utilitza =A1&" "&B1
Arrodonir un nombre=ROUND(A1,2)El segon argument indica les xifres decimals

Totes les cadenes de fórmula han de començar amb =. Els noms de funció són insensibles a majúscules/minúscules a fitxers compatibles amb Excel, però la forma convencional en majúscules es mostra més amunt per a la llegibilitat.


Exemple complet

L’exemple següent crea un conjunt de dades de cinc files amb valors numèrics a la columna A, després escriu les fórmules SUM, AVERAGE, MAX i MIN a la columna B, i desa el resultat en un fitxer 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")

Quan aquest fitxer s’obre a Excel o LibreOffice Calc, la columna C mostrarà:

FilaFórmulaResultat esperat
C2=SUM(A2:A6)105
C3=AVERAGE(A2:A6)21
C4=MAX(A2:A6)35
C5=MIN(A2:A6)7

Notes

Les cadenes de fórmula han de començar amb =

La biblioteca emmagatzema la cadena tal com és. Ometent el caràcter inicial = causa el lector de fulls de càlcul perquè tracti el text com una cadena literal en lloc d’una fórmula.

##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 referències d’interval utilitzen la notació estàndard d’Excel A1

Els intervals de fila-columna s’escriuen com a FirstCell:LastCell utilitzant columnes en majúscules lletres i números de fila basats en 1: "A1:A10", "B2:D5", "C3:C3". El FOSS la biblioteca no tradueix ni valida la cadena d’interval — un interval invàlid es guardarà tal com està i provocarà un error al lector de fulls de càlcul en obrir-lo.

Les fórmules s’emmagatzemen com a cadenes, no s’avaluen

Aspose.Cells FOSS does not include a formula engine. If you need the computed resultat d’una fórmula a Python (per exemple, per realitzar càlculs addicionals), calcula el valor tu mateix i escriu-lo com a valor estàtic amb .value. Utilitza fórmules només quan l’usuari final obrirà el fitxer en una aplicació de fulls de càlcul que els pot avaluar.

Vegeu també

 Català