Lucrul cu formulele

Prezentare 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.

Există două moduri de a plasa o formulă într-o celulă:

  1. Constructor de celulă — ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula proprietate — ws.cells["A4"].formula = "=SUM(A1:A3)"

Ambele abordări stochează aceleași date. Forma cu constructor este compactă când construiți o foaie de la zero; forma cu proprietate este mai naturală când aveți deja o referință la o celulă existentă și doriți să îi atașați o formulă.


Setarea unei formule prin constructorul Cell

The Cell semnătura constructorului este Cell(value, formula). Pentru a crea un pur celulă de formulă, trece None ca valoare și șirul de expresie ca al doilea 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")

Setarea value=None face explicit faptul că celula nu are nicio valoare statică — conținutul său conținutul afișat provine în totalitate din formulă. Transmiterea unui non-None valoare împreună cu o formulă este permisă, dar neobișnuită; majoritatea cititoarelor de foi de calcul vor afișa rezultatul formulei și vor ignora valoarea stocată.


Setarea unei formule prin .formula Proprietate

Atribuiți direct la cell.formula când aveți deja o referință la celulă sau când doriți să adăugați o formulă într-o celulă care a fost scrisă anterior cu o valoare:

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

Citirea înapoi a unei formule

După ce ați scris o celulă cu formulă, folosiți .formula pentru a recupera șirul expresiei și .value pentru a recupera orice valoare statică (dacă există) care a fost stocată alături de ea.

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)

În practică, .value este None pentru orice celulă creată cu Cell(None, formula). Dacă încărcați un registru de lucru existent care a fost salvat anterior cu valori calculate stocate în cache alături de formule, .value poate returna ultimul rezultat din cache — dar acest comportamentul depinde de modul în care aplicația de origine a salvat fișierul și ar trebui nu poate fi considerat de încredere pentru calcule noi.

Pentru a distinge o celulă cu formulă de o celulă cu valoare simplă în timpul execuției:

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

Formule Excel comune

Tabelul de mai jos enumeră funcțiile Excel utilizate frecvent, împreună cu șiruri de formule exemplu pe care le puteți transmite direct către Aspose.Cells FOSS.

ScopȘir de formulăObservații
Sumează un interval=SUM(A1:A10)Adună toate valorile numerice din interval
Media unui interval=AVERAGE(A1:A10)Ignoră celulele goale
Valoare maximă=MAX(A1:A10)Returnează cel mai mare număr
Valoare minimă=MIN(A1:A10)Returnează cel mai mic număr
Numără celulele numerice=COUNT(A1:A10)Numără doar celulele cu valori numerice
Numără celulele ne-goale=COUNTA(A1:A10)Numără orice celulă ne-goală
Valoare condițională=IF(A1>100,"High","Low")Formă cu trei argumente: test, rezultat-adevărat, rezultat-fals
Căutare verticală=VLOOKUP(D1,A1:B10,2,FALSE)Potrivire exactă (FALSE) recomandat
Concatenează șiruri=CONCATENATE(A1," ",B1)Sau folosește =A1&" "&B1
Rotunjește un număr=ROUND(A1,2)Al doilea argument este numărul de zecimale

Toate șirurile de formulă trebuie să înceapă cu =. Numele funcțiilor nu fac diferență între majuscule și minuscule în fișierele compatibile cu Excel, dar forma convențională cu majuscule este afișată mai sus pentru claritate.


Exemplu complet

Exemplul de mai jos creează un set de date cu cinci rânduri de valori numerice în coloana A, apoi scrie formulele SUM, AVERAGE, MAX și MIN în coloana B și salvează rezultatul într-un fișier 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")

Când acest fișier este deschis în Excel sau LibreOffice Calc, coloana C va afișa:

RândFormulăRezultat așteptat
C2=SUM(A2:A6)105
C3=AVERAGE(A2:A6)21
C4=MAX(A2:A6)35
C5=MIN(A2:A6)7

Observații

Șirurile de formulă trebuie să înceapă cu =

Biblioteca stochează șirul așa cum este. Omiterea caracterului inițial = provoacă cititorului de foi de calcul să trateze textul ca un șir literal în loc de o formulă.

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

Referințele de interval folosesc notația standard Excel A1

Intervalele rând-coloană sunt scrise ca FirstCell:LastCell folosind litere mari pentru coloane și numere de rând începând de la unu: "A1:A10", "B2:D5", "C3:C3". Biblioteca FOSS biblioteca nu traduce sau validează șirul de interval — un interval invalid va să fie stocat literalmente și să provoace o eroare în cititorul de foi de calcul la deschidere.

Formulele sunt stocate ca șiruri, nu evaluate

Aspose.Cells FOSS does not include a formula engine. If you need the computed rezultatul unei formule în Python (de exemplu, pentru a efectua calcule suplimentare), calculează valoarea singur și scrie-o ca o valoare statică cu .value. Folosește formule numai când utilizatorul final va deschide fișierul într-o aplicație de foi de calcul care poate să le evalueze.

Vezi și

 Română