Práca s formulami
Prehľad
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.
Existujú dva spôsoby, ako umiestniť vzorec do bunky:
- Konstruktor bunky —
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)") .formulavlastnosť —ws.cells["A4"].formula = "=SUM(A1:A3)"
Oba prístupy ukladajú rovnaké údaje. Forma konštruktora je kompaktná, keď vytvárate hárok od začiatku; forma vlastnosti je prirodzenejšia, keď už máte odkaz na existujúcu bunku a chcete k nej pripojiť vzorec.
Nastavenie vzorca prostredníctvom konštruktora Cell
Podpis Cell konštruktora je Cell(value, formula). Na vytvorenie čistého bunky vzorca, odovzdajte None ako hodnotu a reťazec výrazu ako druhý 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")Nastavenie value=None explicitne uvádza, že bunka nemá statickú hodnotu — jej zobrazovaný obsah pochádza výlučne zo vzorca. Odovzdanie ne-None hodnoty spolu so vzorcom je povolené, ale neobvyklé; väčšina čítačov tabuliek zobrazí výsledok vzorca a ignoruje uloženú hodnotu.
Nastavenie vzorca cez .formula Vlastnosť
Priradiť priamo cell.formula keď už máte referenciu na bunku alebo keď chcete pridať vzorec do bunky, ktorá bola predtým zapísaná s hodnotou:
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")Čítanie vzorca späť
Po zapísaní bunky s vzorcom použite .formula na získanie reťazca výrazu a .value na získanie akejkoľvek statickej hodnoty (ak nejaká bola) uložené vedľa neho.
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)V praxi, .value je None pre akúkoľvek bunku vytvorenú pomocou Cell(None, formula). Ak načítate existujúci zošit, ktorý bol predtým uložený s vypočítanými hodnotami uloženými v cache vedľa vzorcov, .value môže vrátiť posledný uložený výsledok — ale toto správanie závisí od toho, ako pôvodná aplikácia uložila súbor, a malo by byť nevyužívané pre čerstvé výpočty.
Ako rozlíšiť bunku s vzorcom od bunky s obyčajnou hodnotou za behu:
cell = ws.cells["A1"]
if cell.formula:
print(f"Formula cell: {cell.formula}")
else:
print(f"Value cell: {cell.value}")Bežné Excelové vzorce
Nasledujúca tabuľka uvádza často používané Excel funkcie s príkladnými reťazcami vzorcov, ktoré môžete odovzdať priamo do Aspose.Cells FOSS.
| Účel | Reťazec vzorca | Poznámky |
|---|---|---|
| Súčet rozsahu | =SUM(A1:A10) | Sčítava všetky číselné hodnoty v rozsahu |
| Priemer rozsahu | =AVERAGE(A1:A10) | Ignoruje prázdne bunky |
| Maximálna hodnota | =MAX(A1:A10) | Vráti najväčšie číslo |
| Minimálna hodnota | =MIN(A1:A10) | Vráti najmenšie číslo |
| Počet číselných buniek | =COUNT(A1:A10) | Počíta bunky iba s číselnými hodnotami |
| Počet neprázdnych buniek | =COUNTA(A1:A10) | Počíta každú neprázdnu bunku |
| Podmienená hodnota | =IF(A1>100,"High","Low") | Formát s tromi argumentmi: test, výsledok‑ak‑pravda, výsledok‑ak‑nepravda |
| Vertikálne vyhľadávanie | =VLOOKUP(D1,A1:B10,2,FALSE) | Presná zhoda (FALSE) odporúčané |
| Zreťazdiť reťazce | =CONCATENATE(A1," ",B1) | Alebo použite =A1&" "&B1 |
| Zaokrúhliť číslo | =ROUND(A1,2) | Druhý argument je počet desatinných miest |
Všetky reťazce vzorcov musia začínať s =. Názvy funkcií nie sú citlivé na veľkosť písmen v súboroch kompatibilných s Excelom, ale konvenčná veľká forma je uvedená vyššie pre čitateľnosť.
Úplný príklad
Nasledujúci príklad vytvorí dataset s piatimi riadkami číselných hodnôt v stĺpci A, potom zapíše vzorce SUM, AVERAGE, MAX a MIN do stĺpca B a uloží výsledok do súboru 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")Keď sa tento súbor otvorí v Exceli alebo LibreOffice Calc, stĺpec C zobrazí:
| Riadok | Vzorec | Očakávaný výsledok |
|---|---|---|
| C2 | =SUM(A2:A6) | 105 |
| C3 | =AVERAGE(A2:A6) | 21 |
| C4 | =MAX(A2:A6) | 35 |
| C5 | =MIN(A2:A6) | 7 |
Poznámky
Reťazce vzorcov musia začínať =
Knižnica ukladá reťazec tak, ako je. Vynechanie úvodného = spôsobí, že čítanie tabuľky bude text považovať za doslovný reťazec namiesto vzorca.
##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)"Referencie rozsahov používajú štandardnú notáciu Excel A1
Rozsahy riadkov a stĺpcov sa zapisujú ako FirstCell:LastCell s použitím veľkých písmen stĺpcov a čísel riadkov začínajúcich od jedného: "A1:A10", "B2:D5", "C3:C3". FOSS knižnica neprekladá ani nekontroluje reťazec rozsahu — neplatný rozsah bude uložený doslovne a spôsobí chybu v čítači tabuľky pri otváraní.
Vzorce sú uložené ako reťazce, nie sú vyhodnotené
Aspose.Cells FOSS does not include a formula engine. If you need the computed výsledok vzorca v Python (napríklad na ďalšie výpočty), vypočítajte hodnotu sami a zapíšte ju ako statickú hodnotu s .value. Použite vzorce iba vtedy, keď koncový používateľ otvorí súbor v tabuľkovom programe ktorý ich dokáže vyhodnotiť.
Pozri tiež
- Referenčná dokumentácia API: Kompletná dokumentácia tried a metód pre
aspose.cells_foss - Znalostná báza: Sprievodcovia zameraní na úlohy
- Prehľad produktu: Zhrnutie funkcií a možností
- Začíname / Inštalácia: pip install a nastavenie
- Blog: Predstavenie Aspose.Cells FOSS: Prehľad knižnice a rýchly štart