Excel výpočtový engine
Prehľad
HotXLS obsahuje vstavaný engine na parsovanie a výpočet vzorcov; tento engine vyhodnocuje vzorce buniek programovo v rámci vášho procesu, čím eliminuje potrebu volať Excel alebo externé OLE ovládače na vyriešenie vypočítaných hodnôt zošita
Vykonávanie výpočtov
Pred uložením alebo exportom spustite úplný prepočet zošita pomocou hlavného rozhrania zošita
procedure Calculate;
Engine podporuje štandardné rodiny matematických, dátumových, logických, reťazcových a štatistických funkcií; sekvenčne rieši závislosti buniek a sleduje reťazce odkazov na prevenciu kruhových odkazov
Kontextové vyhodnocovanie vzorcov
TXLSWorksheet a TXLSXWorksheet poskytujú EvaluateFormulaAt na výpočet textu vzorca vo vybranom riadku a stĺpci (číslovanom od jednotky) bez zápisu do dočasnej bunky alebo zmeny stavu výpočtu zošita
Štýl odkazov A1 aj R1C1, lokálne názvy, štruktúrované odkazy, závislosti vzorcov, koreňové uzly polí, typované chybové hodnoty Excelu, volatilný stav, explicitná autorizácia externých odkazov, zrušenie aj stabilné kategórie zlyhaní zdieľa bežný vyhodnocovač zošita
CreateFormulaEvaluationTemplate raz skompiluje nemenné ukotvenie a znovu ho používa naprieč cieľovými bunkami; štruktúrované odkazy A1 citlivé na cieľový riadok sa riešia pre každý cieľový kontext zvlášť a limity na jedno volanie obmedzujú dĺžku vzorca, počet krokov syntaktických položiek, hĺbku rekurzie aj počet bajtov generovaného poľa
Typy výsledkov, predvolené rozpočty, pravidlá životného cyklu a príklady pre Delphi či C++Builder popisuje stránka Kontextové vyhodnocovanie vzorcov
Operátory polí
Aritmetické, porovnávacie a zreťazovacie operátory, unárna negácia aj operátor percent akceptujú vypočítané polia aj skalárne hodnoty
Skalár sa rozšíri do každého prvku a pole s jedným riadkom alebo jedným stĺpcom sa rozšíri v kompatibilnom rozmere; nekompatibilné tvary vracajú #VALUE!
Chyby zostávajú zachované vo svojich výsledkových bunkách, takže jedno delenie nulou alebo jeden neplatný prvok nezahodí hodnoty vypočítané pre zostávajúce bunky
COMBINA a PERMUTATIONA zdieľajú skalárnu aj broadcast semantiku pre polia, orezávajú argumenty na nezáporné celé čísla a kontrolujú pretečenie, kým MUNIT vracia kompaktnú dvojrozmernú jednotkovú maticu typu Double
FormulaArrayMemoryLimit má predvolenú hodnotu 64 MiB a obmedzuje veľkosť generovaných maticových údajov; MUNIT navyše kontroluje zostávajúcu spill oblasť hárka namiesto pevne stanoveného stropu rozmerov
Zisťovanie prítomnosti vzorca
ISFORMULA(reference) zisťuje, či bunka vlastní vzorec, bez výpočtu odkazovanej bunky, takže vzorec zostane rozpoznateľný aj vtedy, keď jeho cacheovaný výsledok je chyba alebo prázdny reťazec
Obdĺžniková oblasť vracia pravdivostné pole rovnakého tvaru; členy zdieľaných vzorcov a klasických aj XLSX vzorcov poľa vracajú true, zatiaľ čo za bunku s vzorcom sa považuje iba ukotvenie dynamického spillu
Priame hodnoty a skalárne definované názvy vracajú #VALUE!, neplatné odkazy zachovávajú #REF! a generované pravdivostné polia obmedzuje FormulaArrayMemoryLimit
XLSX zapisuje _xlfn.ISFORMULA a pri otvorení obnoví holý názov, ODS používa štandardnú syntax of:=ISFORMULA a výstup Classic XLS nepodporovanú future funkciu odmietne skôr, než sa údaje potvrdia
Moderné textové funkcie
UNICHAR orezáva číselné vstupy smerom k nule a prevádza platné skalárne hodnoty Unicode do UTF-16, vrátane výstupu surrogate párov pre doplnkové roviny a všetkých privátnych rozsahov
Nula a vstupy mimo rozsahu vracajú #VALUE!, izolované surrogate kódové body a Unicode noncharacters vracajú #N/A; vstupy typu oblasť aj generované polia zachovávajú tieto chyby po jednotlivých prvkoch
BAHTTEXT prevádza konečné čísla na thajský text bahtov a satangov, polovičné hodnoty zaokrúhľuje smerom od nuly na dve desatinné miesta, zachováva mínusové znamienko, keď je zaokrúhlená absolútna hodnota nulová, a rozvinie vedeckú notáciu bez zúženia cez celočíselný typ
XLSX ukladá UNICHAR ako _xlfn.UNICHAR a pri opätovnom otvorení obnoví holý názov; BAHTTEXT používa svoju štandardnú identitu funkcie a vo vzorcoch XLS aj XLSX zostáva holý
Regresia a predikcia
LINEST a LOGEST akceptujú jeden alebo viac prediktorských stĺpcov či riadkov a vracajú koeficienty v poradí podľa Excelu, za ktorými nasleduje voliteľný absolútny člen
Keď je argument štatistík true, obe funkcie vracajú úplný päťriadkový výsledok obsahujúci chyby koeficientov, štatistiky prispôsobenia, F štatistiku, stupne voľnosti, regresný súčet štvorcov a reziduálny súčet štvorcov
TREND a GROWTH používajú rovnaký multivariačný model a zachovávajú tvar riadka alebo stĺpca dodaných nových prediktorských hodnôt
Prepočet závislostí v Classic XLS
TXLSWorkbook.Recalculate pri prvom volaní zostaví graf závislostí vzorcov a vyhodnocuje vzorce v poradí od predchodcov k závislým bunkám, nie vo fyzickom poradí buniek
Neskoršie volania graf znovu použijú a prepočítajú iba tranzitívne závislé bunky zmenených hodnôt plus volatilné vzorce; úpravy vzorcov, názvy, štruktúra hárkov a prepisy odkazov graf bezpečne zneplatnia a znovu zostavia
Kruhové odkazy riešia klasické nastavenia zošita EnableIteration, MaxIterations a MaxIterationChange, kým UseFullPrecision=False aplikuje presnosť zobrazených čísel na cacheované výsledky a ich downstream výpočty
Závislosti definovaných názvov
Inkrementálny výpočet sleduje názvy definované na úrovni zošita aj hárka cez vnorené vzorce a odkazy na viacero oblastí
Acyklické vzorce názvov prispievajú svojimi presnými závislosťami buniek, kým rekurzívne cykly názvov bezpečne prejdú na volatilný prepočet (fallback)
What-If dátové tabuľky
Hárky Classic XLS aj moderného XLSX dokážu vytvoriť, vypočítať, čítať, zapisovať, kopírovať a štruktúrne upraviť dátové tabuľky What-If s jednou alebo dvoma premennými
function AddDataTable( const AResultRange, ARowInputCell, AColumnInputCell: WideString ): TXLSDataTable;
Výsledková oblasť obsahuje iba vypočítané výstupné bunky, kým vzorce a skúšobné hodnoty využívajú okolité bunky v rovnakom rozložení ako Excel
- Tabuľka so stĺpcovým vstupom —
ARowInputCellnechajte prázdny, zdrojový vzorec umiestnite nad každý výsledkový stĺpec a skúšobné hodnoty vľavo od výsledkových riadkov - Tabuľka s riadkovým vstupom —
AColumnInputCellnechajte prázdny, zdrojový vzorec umiestnite vľavo od každého výsledkového riadka a skúšobné hodnoty nad výsledkové stĺpce - Tabuľka s dvoma premennými — dodajte obe vstupné bunky, zdrojový vzorec umiestnite nad a vľavo od výsledkovej oblasti, skúšobné hodnoty riadkového vstupu nad výsledky a skúšobné hodnoty stĺpcového vstupu vľavo
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 príklad so stĺpcovým vstupom vypočíta 3, 5 a 7 v D2:D4; každá skúšobná hodnota sa aplikuje cez izolovaný výpočtový kontext, takže vzorce, ktoré sa k B1 dostanú nepriamo cez iné bunky s vzorcami, sa prepočítajú správne
AddDataTable vráti nil pre neplatnú oblasť, neplatný vstupný odkaz alebo vtedy, keď sú obe vstupné odkazy prázdne; kolekcia DataTables hárka sprístupní výslednú definíciu aj jej príznaky zmazaných vstupov
Zmazanie odkazovanej vstupnej bunky zachová definíciu tabuľky a pre jej výstupy vráti #REF!, čo zodpovedá semantike uloženého zošita
Užívateľom definované funkcie
Rozšírte engine vzorcov o vlastnú obchodnú logiku; zaregistrujte vlastné funkcie pomocou udalostí nižšie
Nebezpečné externé názvy a názvy vo štýle makier sa zamietnu skôr, než sa spustia argumenty alebo obsluhy, pokiaľ zošit alebo jednotlivé kontextové vyhodnotenie explicitne nepovolí AllowUnsafeFormulaCallbacks
- Udalosť OnUserFunction — Spracovanie základných užívateľom definovaných funkcií
- Udalosť OnUserFunctionEx — Riešenie komplexných funkcií s parametrami rozsahu buniek
- Spätné volanie užívateľskej funkcie — Požiadavky na signatúru pre externé obsluhy