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
ARowInputCellprá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
AColumnInputCellprá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
- Událost OnUserFunction — Zpracování základních uživatelem definovaných funkcí
- Událost OnUserFunctionEx — Rozlišení složitých funkcí s parametry rozsahu buněk
- Zpětné volání uživatelské funkce — Požadavky na signaturu pro externí obslužné rutiny