Práce s vzorci

Přehled

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 způsoby, jak vložit vzorec do buňky:

  1. Konstruktor buňkyws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula vlastnostws.cells["A4"].formula = "=SUM(A1:A3)"

Oba přístupy ukládají stejná data. Forma s konstruktorem je kompaktní, když vytváříte list od nuly; forma s vlastností je přirozenější, když již máte odkaz na existující buňku a chcete k ní přiřadit vzorec.


Nastavení vzorce pomocí konstruktoru Cell

Tento Cell podpis konstruktoru je Cell(value, formula). Chcete-li vytvořit čistý buňku s formulí, předávejte None jako hodnotu a řetězec výrazu jako 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")

Nastavení value=None dává explicitně najevo, že buňka nemá statickou hodnotu — její zobrazovaný obsah pochází výhradně z formule. Předání ne-None hodnoty vedle formule je povoleno, ale neobvyklé; většina čteček tabulek zobrazí výsledek formule a ignoruje uloženou hodnotu.


Nastavení vzorce pomocí .formula Vlastnost

Přiřadit přímo do cell.formula když již máte odkaz na buňku nebo když chcete přidat vzorec do buňky, která byla dříve zapsána 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")

Čtení vzorce zpět

Po zápisu buňky s vzorcem použijte .formula k získání řetězce výrazu a .value k získání jakékoli statické hodnoty (pokud existuje), která byla uložena vedle ní.

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 pro jakoukoli buňku vytvořenou s Cell(None, formula). Pokud načtete existující sešit, který byl dříve uložen s vypočítanými hodnotami uložené v mezipaměti vedle vzorců, .value může vrátit poslední výsledek z mezipaměti — ale toto chování závisí na tom, jak původní aplikace soubor uložila, a mělo by nebýt spolehlivé pro čerstvé výpočty.

Jak rozlišit buňku se vzorcem od buňky s prostou hodnotou za běhu:

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

Běžné Excelové vzorce

Následující tabulka uvádí často používané Excel funkce s příkladovými řetězci vzorců, které můžete předat přímo do Aspose.Cells FOSS.

ÚčelŘetězec vzorcePoznámky
Sečíst oblast=SUM(A1:A10)Sečte všechny číselné hodnoty v rozsahu
Průměr rozsahu=AVERAGE(A1:A10)Ignoruje prázdné buňky
Maximální hodnota=MAX(A1:A10)Vrací největší číslo
Minimální hodnota=MIN(A1:A10)Vrací nejmenší číslo
Počítá číselné buňky=COUNT(A1:A10)Počítá buňky pouze s číselnými hodnotami
Počítá neprázdné buňky=COUNTA(A1:A10)Počítá jakoukoli neprázdnou buňku
Podmíněná hodnota=IF(A1>100,"High","Low")Tříargumentová forma: test, výsledek‑true, výsledek‑false
Vertikální vyhledávání=VLOOKUP(D1,A1:B10,2,FALSE)Přesná shoda (FALSE) doporučeno
Spojit řetězce=CONCATENATE(A1," ",B1)Nebo použijte =A1&" "&B1
Zaokrouhlit číslo=ROUND(A1,2)Druhý argument je počet desetinných míst

Všechny řetězce vzorců musí začínat =. Názvy funkcí nejsou rozlišovány podle velikosti písmen v soubory kompatibilní s Excelem, ale konvenční velká forma je výše zobrazena pro čitelnost.


Úplný příklad

Následující příklad vytvoří datovou sadu s pěti řádky číselných hodnot ve sloupci A, poté zapíše vzorce SUM, AVERAGE, MAX a MIN do sloupce B a výsledek uloží do souboru 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")

Když je tento soubor otevřen v Excelu nebo LibreOffice Calc, sloupec C zobrazí:

ŘádekVzorecOčekávaný výsledek
C2=SUM(A2:A6)105
C3=AVERAGE(A2:A6)21
C4=MAX(A2:A6)35
C5=MIN(A2:A6)7

Poznámky

Řetězce vzorců musí začínat =

Knihovna ukládá řetězec tak, jak je. Vynechání úvodního = způsobí, že čtečka tabulek bude text považovat za doslovný řetězec místo vzorce.

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

Odkazy na rozsahy používají standardní Excelovou notaci A1

Rozsahy řádek‑sloupec se zapisují jako FirstCell:LastCell používající velká písmena sloupců a čísla řádků počínající od jedné: "A1:A10", "B2:D5", "C3:C3". Open‑source knihovna nepřekládá ani neověřuje řetězec rozsahu — neplatný rozsah bude uložen doslovně a způsobí chybu v čtečce tabulek při otevření.

Vzorce jsou uloženy jako řetězce, nevyhodnoceny

Aspose.Cells FOSS does not include a formula engine. If you need the computed výsledek vzorce v Python (například pro provedení dalších výpočtů), vypočítejte hodnotu sami a zapište ji jako statickou hodnotu pomocí .value. Použijte vzorce pouze tehdy, když koncový uživatel otevře soubor v tabulkovém programu který je schopen je vyhodnotit.

Viz také

 Čeština