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:
- 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 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 vzorce | Pozná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í:
| Řá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)"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é
- Reference API: Úplná dokumentace tříd a metod pro
aspose.cells_foss - Znalostní báze: Úkolově orientované návody
- Přehled produktu: Shrnutí funkcí a schopností
- Začínáme / Instalace: pip install a nastavení
- Blog: Představení Aspose.Cells FOSS: Přehled knihovny a rychlý start