Izračunski stroj Excela
Pregled
HotXLS vključuje vgrajeni stroj za razčlenjevanje in izračunavanje formul; ta stroj programsko vrednoti formule celic znotraj vašega procesa, s čimer odpravlja potrebo po klicanju Excela ali zunanjih krmilnikov OLE za razreševanje izračunanih vrednosti delovnega zvezka
Izvedba izračuna
Pred shranjevanjem ali izvozom sprožite popoln ponovni izračun delovnega zvezka prek glavnega vmesnika delovnega zvezka
procedure Calculate;
Stroj podpira standardne matematične, datumsko, logične, nizovne in statistične družine funkcij; zaporedoma razrešuje odvisnosti celic in sledi verigam sklicev, da prepreči krožne sklice
Kontekstualno vrednotenje formul
TXLSWorksheet in TXLSXWorksheet razkrivata EvaluateFormulaAt za izračun besedila formule v izbrani vrstici in stolpcu z enaštetjem, ne da bi zapisali začasno celico ali spremenili stanje izračuna delovnega zvezka
Sloga sklicev A1 in R1C1, lokalna imena, strukturirani sklici, odvisnosti formul, koreni matrik, tipizirane Excelove vrednosti napak, status hlapnosti, izrecna odobritev zunanjih sklicev, preklic in stabilne kategorije napak si delijo običajni ocenjevalec delovnega zvezka
CreateFormulaEvaluationTemplate enkrat prevede nespremenljivo sidro in ga nato ponovno uporablja za ciljne celice; A1 strukturirani sklici, občutljivi na ciljno vrstico, se razrešijo za vsak ciljni kontekst, omejitve na klic pa urejajo dolžino formule, korake po sintaksnih elementih, globino rekurzije in obseg generirane matrike v bajtih
Vrste rezultatov, privzete proračune, pravila življenjske dobe in primere za Delphi ali C++Builder najdete pod Kontekstualno vrednotenje formul
Matrični operatorji
Operatorji za aritmetiko, primerjavo, stikanje nizov, unarno negacijo in odstotke sprejemajo izračunane matrike poleg skalarnih vrednosti
Skalarna vrednost se uporabi za vsak element, matrika z eno vrstico ali enim stolpcem pa se razširi po združljivi dimenziji; nezdružljive oblike vrnejo #VALUE!
Napake ostanejo v svojih posameznih celicah rezultatov, zato eno deljenje z nič ali en neveljaven element ne zavrže vrednosti, izračunanih za preostale celice
COMBINA in PERMUTATIONA delita semantiko skalarnih vrednosti in razširjanja matrik z odrezanimi nenegativnimi celoštevilskimi argumenti ter preverjanim prelivanjem, MUNIT pa vrne kompaktno dvodimenzionalno enotsko matriko tipa Double
FormulaArrayMemoryLimit je privzeto 64 MiB in omejuje količino podatkov, ki jo generirane matrike zasedejo; MUNIT dodatno preveri še preostali prostor za prelivanje delovnega lista, namesto da vsiljuje fiksno zgornjo mejo dimenzij
Preverjanje prisotnosti formule
ISFORMULA(reference) preveri lastništvo formule brez izračuna sklicevane celice, zato formula ostane zaznavna tudi, kadar je njen predpomnjeni rezultat napaka ali prazen niz
Pravokotni obseg vrne logično matriko enake oblike; člani deljenih formul ter klasičnih ali XLSX matričnih formul vrnejo true, formulo pa ima samo sidro dinamičnega prelivanja
Neposredne vrednosti in skalarna definirana imena vrnejo #VALUE!, neveljavni sklici ohranijo #REF!, generirane logične matrike pa so omejene z FormulaArrayMemoryLimit
XLSX zapiše _xlfn.ISFORMULA in ob odprtju povrne golo ime, ODS uporablja standardno sintakso of:=ISFORMULA, izpis Classic XLS pa zavre nepodprto prihodnjo funkcijo, še preden zapiše podatke
Sodobne besedilne funkcije
UNICHAR odreže številske vhode proti ničli in pretvori veljavne Unicode skalarne vrednosti v UTF-16, vključno z izpisom parov nadomestnih znakov za dopolnilne ravnine in vsa zasebna območja
Ničelni in vrednosti izven obsega vrnejo #VALUE!, osamljene nadomestne kodne točke in Unicode noncharacters pa #N/A; vhodi iz obsegov in generiranih matrik ohranijo te napake na ravni posameznih elementov
BAHTTEXT pretvori končna števila v besedilo tajskih batov in satangov, vrednosti na polovici enote zaokroži proč od ničle na dve decimalni mesti, obdrži negativni predznak, kadar zaokrožena velikost postane nič, in razširi znanstveno notacijo, ne da bi pri tem zožil prek celoštevilskega tipa
XLSX shrani UNICHAR kot _xlfn.UNICHAR in ob ponovnem odprtju povrne golo ime; BAHTTEXT uporablja svojo standardno identiteto funkcije in v formulah XLS in XLSX ostane gol
Regresija in napovedovanje
LINEST in LOGEST sprejemata enega ali več napovednih stolpcev ali vrstic in vrnta koeficiente v Excelovem vrstnem redu, ki jim sledi neobvezna konstanta
Ko je argument za statistiko true, obe funkciji vrneta popoln rezultat s petimi vrsticami, ki vsebuje napake koeficientov, statistiko prileganja, F statistiko, stopnje prostosti, regresijsko vsoto kvadratov in vsoto kvadratov ostankov
TREND in GROWTH uporabljata isti model z več spremenljivkami in ohranita obliko vrstic ali stolpcev podanih novih napovednih vrednosti
Ponovni izračun odvisnosti v klasičnem XLS
TXLSWorkbook.Recalculate ob prvem klicu zgradi graf odvisnosti formul in vrednoti formule v vrstnem redu, kjer gredo predhodniki najprej, namesto po fizičnem vrstnem redu celic
Poznejši klici graf ponovno uporabijo in preračunajo samo tranzitivno odvisne od spremenjenih vrednosti ter hlapne formule; urejanje formul, imena, struktura delovnih listov in prepisi sklicev pa graf varno razveljavijo in znova zgradijo
Krožni sklici uporabljajo klasične nastavitve delovnega zvezka EnableIteration, MaxIterations in MaxIterationChange, UseFullPrecision=False pa uporabi prikazano natančnost števil za predpomnjene rezultate in njihove nadaljnje izračune
Odvisnosti definiranih imen
Inkrementalni izračun sledi imenom z obsegom delovnega zvezka in z obsegom delovnega lista skozi gnezdene formule in sklice na več območij
Aciklične formule imen prispevajo svoje točne odvisnosti po celicah, rekurzivni cikli imen pa se varno vrnejo k hlapnemu ponovnemu izračunu
Tabele podatkov What-If
Delovni listi klasičnega XLS in sodobnega XLSX znajo ustvariti, izračunati, prebrati, zapisati, kopirati in strukturno prilagoditi tabele podatkov What-If z eno ali dvema spremenljivkama
function AddDataTable( const AResultRange, ARowInputCell, AColumnInputCell: WideString ): TXLSDataTable;
Obseg rezultata vsebuje samo izračunane izhodne celice, formule in preskusne vrednosti pa uporabljajo okoliške celice v isti postavitvi kot Excel
- Tabela s stolpcem kot vhodom — pustite
ARowInputCellpraznega, izvorno formulo postavite nad vsak stolpec rezultatov, preskusne vrednosti pa levo od vrstic rezultatov - Tabela z vrstico kot vhodom — pustite
AColumnInputCellpraznega, izvorno formulo postavite levo od vsake vrstice rezultatov, preskusne vrednosti pa nad stolpce rezultatov - Tabela z dvema spremenljivkama — podajte obe vhodni celici, izvorno formulo postavite nad in levo od obsega rezultatov, preskusne vrednosti vrstičnega vhoda nad rezultate, preskusne vrednosti stolpčnega vhoda pa levo
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;
Ta primer s stolpcem kot vhodom izračuna 3, 5 in 7 v D2:D4; vsaka preskusna vrednost se uporabi prek izoliranega konteksta izračuna, zato se formule, ki do B1 pridejo posredno prek drugih celic s formulami, preračunajo pravilno
AddDataTable vrne nil za neveljaven obseg, neveljaven vhodni sklic ali kadar sta oba vhodna sklica prazna; zbirka DataTables delovnega lista razkrije nastalo definicijo in njene zastavice izbrisanih vhodov
Brisanje sklicevane vhodne celice ohrani definicijo tabele in za njene izhode vrne #REF!, kar se ujema s semantiko shranjenega delovnega zvezka
Uporabniško definirane funkcije
Razširite stroj formul s poslovno logiko po meri; svoje funkcije registrirajte z naslednjimi dogodki
Nevarna zunanja imena in imena v stilu makro se zavrnejo, preden se izvedejo argumenti ali ročniki, razen če delovni zvezek ali posamezno kontekstualno vrednotenje izrecno omogoči AllowUnsafeFormulaCallbacks
- Dogodek OnUserFunction — Obdelava osnovnih uporabniško definiranih funkcij
- Dogodek OnUserFunctionEx — Razreševanje kompleksnih funkcij s parametri obsega celic
- Povratni klic uporabniške funkcije — Zahteve podpisa za zunanje ročnike