HotXLS Docs

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 — ARowInputCell nechajte 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 — AColumnInputCell nechajte 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