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:

  1. Konstruktor bunky — ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula vlastnosť — 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.

ÚčelReťazec vzorcaPozná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í:

RiadokVzorecOč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ž

 Slovenčina