HotXLS dokumentáció

Excel számítási motor

Áttekintés

A HotXLS beépített motort tartalmaz a képletek elemzéséhez és kiszámításához; ez a motor programozottan értékeli ki a cellaképleteket a folyamaton belül, kiküszöbölve az Excel vagy külső OLE-vezérlők hívásának szükségességét a kiszámított munkafüzet-értékek megoldásához

Számítás végrehajtása

Mentés vagy exportálás előtt indítsa el a munkafüzet teljes újraszámítását a fő munkafüzet-felület segítségével

procedure Calculate;

A motor támogatja a szabványos matematikai, dátum, logikai, szöveg és statisztikai függvénycsaládokat; szekvenciálisan oldja meg a cellafüggőségeket, és követi a hivatkozási láncokat a körkörös hivatkozások megelőzésére

Kontextusfüggő képlet-kiértékelés

A TXLSWorksheet és a TXLSXWorksheet az EvaluateFormulaAt metódussal számoltatja ki a képletszöveget egy megadott, egytől induló sor- és oszlopkoordinátán, ideiglenes cella írása vagy a munkafüzet számítási állapotának megváltoztatása nélkül

Az A1 és R1C1 hivatkozási stílusok, a helyi nevek, a strukturált hivatkozások, a képletfüggőségek, a tömbgyökerek, a típusos Excel hibaértékek, a volatile állapot, az explicit külső hivatkozás-engedélyezés, a megszakítás és a stabil hibakategóriák mind ugyanazt a normál munkafüzet-kiértékelőt használják

A CreateFormulaEvaluationTemplate egyszer fordít le egy nem módosítható horgonyt (anchor), és újra felhasználja azt a célcellákon; a célsorra érzékeny A1 strukturált hivatkozások minden célkontextushoz külön oldódnak meg, a hívásonkénti limitek pedig korlátozzák a képlet hosszát, a szintaxiselem-lépések számát, a rekurzió mélységét és a generált tömb bájtjait

Lásd a kontextusfüggő képlet-kiértékelés oldalt az eredménytípusokért, az alapértelmezett keretekért, az élettartamszabályokért és a Delphi vagy C++Builder példákért

Tömb operátorok

Az aritmetikai, összehasonlító, összefűző, egyoperandusú negálás és százalék operátorok számított tömböket is elfogadnak a skalár értékek mellett

A skalár érték minden elemre szétterül, az egy soros vagy egy oszlopos tömb pedig a kompatibilis dimenzió mentén; a nem összeegyeztethető alakok #VALUE! hibát adnak

A hibák a saját eredménycellájukban maradnak, így egy nullával való osztás vagy egy érvénytelen elem nem dobja el a többi cellára számolt értékeket

A COMBINA és a PERMUTATIONA skalár és szétterülő tömb szemantikát használ csonkolt, nem negatív egész argumentumokkal és ellenőrzött túlcsordulással, a MUNIT pedig kompakt, kétdimenziós Double egységmátrixot ad vissza

A FormulaArrayMemoryLimit alapértelmezett értéke 64 MiB, és a generált mátrix-adatmennyiséget korlátozza; a MUNIT emellett a munkalap megmaradó spill-területét is ellenőrzi, rögzített dimenzióplafon helyett

Képlet meglétének vizsgálata

A ISFORMULA(reference) anélkül vizsgálja meg, hogy egy cellában áll-e képlet, hogy kiszámolná a hivatkozott cellát, így a képlet akkor is észlelhető, ha a gyorsítótárazott eredménye hiba vagy üres karakterlánc

Egy téglalap alakú tartomány azonos alakú logikai tömböt ad vissza; a közös képlet (shared formula) és a klasszikus vagy XLSX tömbképlet tagjai igazat adnak, egy dinamikus spill esetén pedig csak a horgony (anchor) számít képletcellának

A közvetlen értékek és a skalár definiált nevek #VALUE! hibát adnak, az érvénytelen hivatkozások megtartják a #REF! hibát, a generált logikai tömböket pedig a FormulaArrayMemoryLimit korlátozza

Az XLSX _xlfn.ISFORMULA alakban írja a függvényt, és megnyitáskor helyreállítja az előtag nélküli nevet, az ODS a szabványos of:=ISFORMULA szintaxist használja, a klasszikus XLS kimenet pedig már az adatok rögzítése előtt elutasítja a nem támogatott jövőbeli függvényt

Modern szövegfüggvények

A UNICHAR a numerikus bemeneteket nulla felé csonkolja, az érvényes Unicode skalár értékeket pedig UTF-16-ra alakítja, beleértve a surrogate-pair kimenetet a kiegészítő síkokon és az összes privát használatú tartományban

A nulla és a tartományon kívüli bemenetek #VALUE! hibát adnak, az izolált surrogate kódpontok és a Unicode noncharacter értékek pedig #N/A hibát; a tartomány- és generált tömb bemenetek elemenként megőrzik ezeket a hibákat

A BAHTTEXT a véges számokat thai baht és satang szöveggé alakítja, a felező ponton lévő értékeket két tizedesjegyre nullától elfelé kerekíti, negatív előjelet tart akkor is, ha a kerekített nagyság nulla lesz, és a tudományos jelölést egész típusra való szűkítés nélkül bontja ki

Az XLSX a UNICHAR függvényt _xlfn.UNICHAR alakban menti, és újranyitáskor helyreállítja az előtag nélküli nevet; a BAHTTEXT a szabványos függvényazonosságát használja, és XLS és XLSX képletekben egyaránt előtag nélküli néven szerepel

Regresszió és előrejelzés

A LINEST és a LOGEST egy vagy több prediktor oszlopot vagy sort fogad el, és Excel-sorrendben adja vissza az együtthatókat, az opcionális konstans taggal kiegészítve

Ha a statisztika argumentum értéke true, mindkét függvény a teljes, ötsoros eredményt adja vissza, amely tartalmazza az együtthatók hibáit, az illeszkedési statisztikákat, az F statisztikát, a szabadságfokokat, a regresszió négyzetösszegét és a reziduális négyzetösszeget

A TREND és a GROWTH ugyanazt a többváltozós modellt használja, és megőrzi a megadott új prediktor értékek sor- vagy oszlopalakját

Klasszikus XLS függőségi újraszámítás

A TXLSWorkbook.Recalculate első híváskor felépíti a képletfüggőségi gráfot, és a képleteket a fizikai cellasorrend helyett a precedenciák előre vételével értékeli ki

A későbbi hívások újrahasznosítják a gráfot, és csak a megváltozott értékek tranzitív függőit valamint a volatile képleteket számolják újra; a képletszerkesztések, a nevek, a munkalap-struktúra és a hivatkozás-átírások biztonságosan érvénytelenítik és újraépítik a gráfot

A körkörös hivatkozások a klasszikus munkafüzet EnableIteration, MaxIterations és MaxIterationChange beállításait használják, a UseFullPrecision=False pedig a megjelenített számok pontosságát alkalmazza a gyorsítótárazott eredményekre és azok további számításaira

Definiált nevek függőségei

Az inkrementális számítás a munkafüzet- és munkalap-szintű neveket beágyazott képleteken és többterületű hivatkozásokon keresztül is követi

A körmentes névképletek a pontos cellafüggőségeikkel hozzájárulnak a gráfhoz, a rekurzív névciklusok pedig biztonságosan volatile újraszámításra váltanak vissza

What-If adattáblák

Mind a klasszikus XLS, mind a modern XLSX munkalapok képesek egy- és kétváltozós What-If adattáblák létrehozására, kiszámítására, olvasására, írására, másolására és szerkezeti igazítására

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

Az eredménytartomány csak a kiszámított kimeneti cellákat tartalmazza, a képletek és a prób értékek pedig a környező cellákat használják, ugyanúgy, mint az Excel

  • Oszlopbemenetes tábla — hagyja a ARowInputCell értékét üresen, a forrásképletet helyezze minden eredményoszlop fölé, a prób értékeket pedig az eredménysorok bal oldalára
  • Sorbemenetes tábla — hagyja a AColumnInputCell értékét üresen, a forrásképletet helyezze minden eredménysor bal oldalára, a prób értékeket pedig az eredményoszlopok fölé
  • Kétváltozós tábla — adja meg mindkét bemeneti cellát, a forrásképletet az eredménytartomány fölé és bal oldalára, a sorbemeneti prób értékeket az eredmények fölé, az oszlopbemeneti prób értékeket pedig balra
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;

Ez az oszlopbemenetes példa a D2:D4 tartományban a 3, 5 és 7 értékeket számolja ki; minden prób érték izolált számítási kontextuson keresztül érvényesül, így azok a képletek, amelyek más képletcellákon keresztül érnek a B1 cellához, helyesen újraszámítódnak

A AddDataTable érvénytelen tartomány, érvénytelen bemeneti hivatkozás esetén, illetve ha mindkét bemeneti hivatkozás üres, nil értéket ad vissza; a munkalap DataTables gyűjteménye közzéteszi az elkészült definíciót és annak törölt bemenetre utaló jelzőit

Egy hivatkozott bemeneti cella törlése megőrzi a tábladefiníciót, a kimenetekre pedig #REF! hibát ad vissza, egyezően a mentett munkafüzet szemantikájával

Felhasználó által definiált függvények

Bővítse a képletmotort egyéni üzleti logikával; regisztrálja saját függvényeit az alábbi események segítségével

A veszélyes külső és makróstílusú nevek már az argumentumok és a kezelők futása előtt elutasításra kerülnek, hacsak a munkafüzet vagy az egyéni kontextusfüggő kiértékelés explicit módon nem engedélyezi az AllowUnsafeFormulaCallbacks használatát