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ă:
- Constructor de celulă —
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)") .formulaproprietate —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ând | Formulă | 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
- Referință API: Documentație completă a claselor și metodelor pentru
aspose.cells_foss - Bază de cunoștințe: Ghiduri practice orientate pe sarcini
- Prezentare generală a produsului: Rezumat al funcționalităților și capabilităților
- Începeți / Instalare: pip install și configurare
- Blog: Introducerea Aspose.Cells FOSS: Prezentare a bibliotecii și pornire rapidă