Dokumentacija HotXLS

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 ARowInputCell praznega, izvorno formulo postavite nad vsak stolpec rezultatov, preskusne vrednosti pa levo od vrstic rezultatov
  • Tabela z vrstico kot vhodom — pustite AColumnInputCell praznega, 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