Práce s vzorci
Přehled
Aspose.Cells FOSS ukládá vzorce jako řetězce kompatibilní s Excelem.
Knihovna nevyhodnocuje
vzorce interně — zachovává výraz doslovně v
souboru a tabulková aplikace (Excel, LibreOffice Calc nebo jakýkoli kompatibilní
čtečka) vypočítá výsledek při otevření souboru.
Existují dva způsoby, jak vložit vzorec do buňky:
- Konstruktor buňky —
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)") .formulavlastnost —ws.cells["A4"].formula = "=SUM(A1:A3)"
Oba přístupy ukládají stejná data. Forma konstruktoru je kompaktní, když vytváříte list od nuly; forma vlastnosti je přirozenější, když již máte odkaz na existující buňku a chcete k ní připojit vzorec.
Nastavení vzorce pomocí konstruktoru buňky
Podpis konstruktoru Cell je Cell(value, formula). Pro vytvoření čisté
buňky s formulí předejte 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 explicitně uvádí, že buňka nemá statickou hodnotu — její zobrazovaný obsah pochází výhradně ze vzorce. Předání ne-None hodnoty spolu se vzorcem je povoleno, ale neobvyklé; většina čteček tabulek zobrazí výsledek vzorce a ignoruje uloženou hodnotu.
Nastavení vzorce pomocí vlastnosti .formula Property
Přiřaďte přímo do cell.formula, pokud již máte odkaz na buňku nebo
pokud 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 formulí 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 je .value None pro každou buňku vytvořenou pomocí Cell(None, formula).
Pokud načtete existující sešit, který byl dříve uložen s vypočtenými hodnotami
uloženými v mezipaměti spolu s formuláři, .value může vrátit poslední uložený výsledek — ale toto
chování závisí na tom, jak původní aplikace soubor uložila, a nemělo by se
spoléhat na čerstvé výpočty.
Pro rozlišení buňky s formulí od buňky s obyčejnou 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é vzorce v Excelu
Následující tabulka uvádí často používané funkce Excelu s ukázkovými řetězci vzorců, které můžete předat přímo do Aspose.Cells FOSS.
| Účel | Formula string | Poznámky |
|---|---|---|
| Sečíst oblast | =SUM(A1:A10) | Přidá všechny číselné hodnoty v oblasti |
| Průměr oblasti | =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čítat číselné buňky | =COUNT(A1:A10) | Počítá pouze buňky s číselnými hodnotami |
| Počítat 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) | Doporučuje se přesná shoda (FALSE) |
| 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í jsou v
souborech kompatibilních s Excelem nezávislé na velikosti písmen, ale konvenční velká forma je uvedena výše pro
čitelnost.
Kompletní příklad
Následující příklad vytvoří datovou sadu s pěti řádky číselných hodnot ve sloupci A, pak zapíše vzorce SUM, AVERAGE, MAX a MIN do sloupce B a uloží výsledek 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í:
| Řádek | Vzorec | Oč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)"Rozsahy odkazů používají standardní notaci Excel A1
Rozsahy řádků a sloupců jsou zapisovány jako FirstCell:LastCell pomocí velkých písmen sloupců a čísel řádků počínajících od jedné: "A1:A10", "B2:D5", "C3:C3". Knihovna FOSS nepřekládá ani nevaliduje ř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, nevyhodnocovány
Aspose.Cells FOSS neobsahuje výpočetní engine pro vzorce. Pokud potřebujete vypočtený
výsledek vzorce v Pythonu (například pro provedení dalších výpočtů),
vypočítejte hodnotu sami a zapište ji jako statickou hodnotu pomocí .value. Používejte
vzorce pouze tehdy, když koncový uživatel otevře soubor v tabulkové aplikaci,
která je dokáže vyhodnotit.
Viz také
- API Reference: Úplná dokumentace tříd a metod pro
aspose.cells_foss - Knowledge Base: Průvodci zaměřený na úkoly
- Product Overview: Shrnutí funkcí a schopností
- Getting Started / Installation: pip install a nastavení
- Blog: Introducing Aspose.Cells FOSS: Přehled knihovny a rychlý start