Dokumentace HotXLS

Výpočetní stroj aplikace Excel

Přehled

HotXLS obsahuje vestavěný stroj pro analýzu a výpočet vzorců; tento stroj vyhodnocuje vzorce buněk programově ve vašem procesu, což eliminuje nutnost volat aplikaci Excel nebo externí řadiče OLE pro rozlišení vypočítaných hodnot sešitu

Provedení výpočtu

Před uložením nebo exportem spusťte úplné přepočítání sešitu pomocí hlavního rozhraní sešitu

procedure Calculate;

Stroj podporuje standardní matematické, datové, logické, řetězcové a statistické rodiny funkcí; postupně rozlišuje závislosti buněk a sleduje řetězce odkazů, aby zabránil cyklickým odkazům

Kontextové vyhodnocení vzorců

TXLSWorksheet a TXLSXWorksheet poskytují metodu EvaluateFormulaAt, která spočítá text vzorce v zadaném řádku a sloupci (číslovaných od jedničky), aniž by zapsala dočasnou buňku nebo změnila výpočetní stav sešitu

Referenční styly A1 a R1C1, lokální názvy, strukturované odkazy, závislosti vzorců, kořeny polí, typované chybové hodnoty Excelu, příznak volatility, explicitní autorizace externích odkazů, rušení výpočtu i stabilní kategorie selhání — to všechno zpracovává běžný vyhodnocovač sešitu

CreateFormulaEvaluationTemplate jednou zkompiluje neměnnou kotvu a dál ji znovu využívá pro cílové buňky; strukturované odkazy A1 citlivé na cílový řádek se řeší pro každý cílový kontext a limity na jedno volání omezují délku vzorce, počet kroků přes syntaktické prvky, hloubku rekurze i velikost generovaných polí v bajtech

Typy výsledků, výchozí rozpočty, pravidla životnosti a příklady pro Delphi a C++Builder najdete v tématu Kontextové vyhodnocování vzorců

Operátory polí

Aritmetické a srovnávací operátory, zřetězení, unární negace a operátor procenta přijímají kromě skalárních hodnot i vypočtená pole

Skalár se šíří do každého prvku a pole o jednom řádku či jednom sloupci se šíří podél kompatibilní dimenze; nekompatibilní tvary vracejí #VALUE!

Chyby zůstávají zachované ve svých výsledných buňkách, takže jedno dělení nulou nebo jeden neplatný prvek nezahodí hodnoty vypočtené pro zbývající buňky

COMBINA a PERMUTATIONA sdílejí skalární semantiku i semantiku šířených polí (broadcast), ořezávají argumenty na nezáporná celá čísla a kontrolují přetečení; MUNIT vrací kompaktní dvourozměrnou jednotkovou matici typu Double

FormulaArrayMemoryLimit má výchozí hodnotu 64 MiB a omezuje velikost generovaných matic; MUNIT navíc kontroluje zbývající spill oblast listu místo pevného stropu dimenzí

Zjišťování přítomnosti vzorce

ISFORMULA(reference) zjišťuje vlastnictví vzorce bez výpočtu odkazované buňky, takže vzorec zůstane detekovatelný i tehdy, když jeho výsledek v cache je chyba nebo prázdný řetězec

Obdélníková oblast vrací logické pole stejného tvaru; buňky sdílených vzorců a klasických či XLSX maticových vzorců vrací true, zatímco u dynamického spillu je buňkou se vzorcem jen kotva

Přímé hodnoty a skalární definované názvy vrací #VALUE!, neplatné odkazy zachovávají #REF! a generovaná logická pole omezuje FormulaArrayMemoryLimit

XLSX zapisuje _xlfn.ISFORMULA a při otevření obnoví holé jméno, ODS používá standardní syntaxi of:=ISFORMULA a výstup Classic XLS nepodporovanou future funkci odmítne dřív, než se data zapíšou

Moderní textové funkce

UNICHAR ořezává číselné vstupy směrem k nule a převádí platné Unicode skalární hodnoty do UTF-16, včetně výstupu surrogate párů pro doplňkové roviny a všech privátních oblastí

Nula a vstupy mimo rozsah vrací #VALUE!, izolované surrogate kódové body a Unicode noncharacters vrací #N/A; vstupy typu oblast a generovaná pole zachovávají tyto chyby po jednotlivých prvcích

BAHTTEXT převádí konečná čísla na thajský text s bahty a satangy, zaokrouhluje poloviční hodnoty směrem od nuly na dvě desetinná místa, ponechá záporné znaménko, pokud se zaokrouhlená velikost zrovná, a rozvíjí vědeckou notaci bez zúžení přes celočíselný typ

XLSX ukládá UNICHAR jako _xlfn.UNICHAR a při opětovném otevření obnoví holé jméno; BAHTTEXT používá svou standardní identitu funkce a ve vzorcích XLS i XLSX zůstává holé

Regrese a predikce

LINEST a LOGEST přijímají jeden nebo více prediktorových sloupců či řádků a vrací koeficienty v pořadí jako Excel, následované volitelnou konstantou

Je-li argument statistics true, obě funkce vrátí kompletní pětiřádkový výsledek obsahující chyby koeficientů, statistiky kvality, F statistiku, stupně volnosti, regresní součet čtverců a reziduální součet čtverců

TREND a GROWTH používají stejný víceproměnný model a zachovávají řádkový či sloupcový tvar zadaných nových prediktorových hodnot

Přepočet závislostí v Classic XLS

TXLSWorkbook.Recalculate při prvním volání postaví graf závislostí vzorců a vyhodnocuje vzorce v pořadí podle precedentů, nikoli podle fyzického pořadí buněk

Další volání graf znovu použijí a přepočítají jen tranzitivní závislé vzorce změněných hodnot a volatilní vzorce; úpravy vzorců, názvy, struktura listu a přepisy odkazů graf bezpečně zneplatní a znovu sestaví

Cyklické odkazy využívají klasická nastavení sešitu EnableIteration, MaxIterations a MaxIterationChange a UseFullPrecision=False aplikuje na uložené výsledky i na ně navazující výpočty přesnost zobrazených čísel

Závislosti definovaných názvů

Inkrementální výpočet sleduje názvy s platností na úrovni sešitu i listu skrze vnořené vzorce a odkazy na více oblastí

Acyklické vzorce názvů přispějí svými přesnými závislostmi na buňkách, zatímco rekurzivní cykly názvů bezpečně přejdou na Fallback v podobě volatilního přepočtu

Datové tabulky What-If

Listy v Classic XLS i moderním XLSX umí vytvářet, počítat, číst, zapisovat, kopírovat a strukturálně upravovat datové tabulky What-If s jednou nebo dvěma proměnnými

function AddDataTable(
  const AResultRange, ARowInputCell, AColumnInputCell: WideString
): TXLSDataTable;

Výsledná oblast obsahuje jen vypočtené výstupní buňky, zatímco vzorce a zkušební hodnoty používají okolní buňky ve stejném rozvržení jako Excel

  • Tabulka se sloupcovým vstupem — nechte ARowInputCell prázdný, zdrojový vzorec umístěte nad každý výsledný sloupec a zkušební hodnoty vlevo od výsledných řádků
  • Tabulka s řádkovým vstupem — nechte AColumnInputCell prázdný, zdrojový vzorec umístěte vlevo od každého výsledného řádku a zkušební hodnoty nad výsledné sloupce
  • Tabulka se dvěma proměnnými — zadejte obě vstupní buňky, zdrojový vzorec umístěte nad a vlevo od výsledné oblasti, zkušební hodnoty pro řádkový vstup nad výsledky a zkušební hodnoty pro sloupcový vstup vlevo
Sheet.Range['B1', 'B1'].Value := 0;
Sheet.Range['D1', 'D1'].Formula := '=B1*2+1';
Sheet.Range['C2', 'C2'].Value := 1;
Sheet.Range['C3', 'C3'].Value := 2;
Sheet.Range['C4', 'C4'].Value := 3;

Table := Sheet.AddDataTable('D2:D4', '', 'B1');
Workbook.Recalculate;

Tento příklad se sloupcovým vstupem spočítá v D2:D4 hodnoty 3, 5 a 7; každá zkušební hodnota se aplikuje přes izolovaný výpočetní kontext, takže vzorce, které se k B1 dostanou nepřímo přes jiné buňky se vzorci, se přepočítají správně

AddDataTable vrátí nil pro neplatnou oblast, neplatný vstupní odkaz nebo když jsou oba vstupní odkazy prázdné; kolekce DataTables na listu zpřístupní výslednou definici i její příznaky smazaných vstupů

Smazání odkazované vstupní buňky zachová definici tabulky a pro její výstupy vrátí #REF!, což odpovídá sémantice uloženého sešitu

Uživatelem definované funkce

Rozšiřte stroj vzorců o vlastní obchodní logiku; zaregistrujte své vlastní funkce pomocí níže uvedených událostí

Nebezpečné externí názvy a názvy ve stylu maker se odmítnou dřív, než se spustí argumenty nebo obslužné rutiny, pokud sešit nebo jednotlivé kontextové vyhodnocení výslovně nepovolí AllowUnsafeFormulaCallbacks