Excel-beregningsmotor
Oversikt
HotXLS inneholder en innebygd motor for tolkning og beregning av formler; denne motoren evaluerer celleformler programmatisk i prosessen din og fjerner behovet for å kalle Excel eller eksterne OLE-kontrollere for å løse beregnede arbeidsbokverdier
Beregningskjøring
Før du lagrer eller eksporterer, utløser du en fullstendig omregning av arbeidsboken via hovedgrensesnittet for arbeidsboken
procedure Calculate;
Motoren støtter standardfamilier for matematiske, dato-, logiske, streng- og statistiske funksjoner; den løser celleavhengigheter sekvensielt og følger referansekjeder for å forhindre sirkulære referanser
Kontekstuell formelevaluering
TXLSWorksheet og TXLSXWorksheet eksponerer EvaluateFormulaAt for å beregne formulartekst i en valgt rad og kolonne med én-basert indeksering, uten å skrive en midlertidig celle eller endre beregningstilstanden i arbeidsboken
A1- og R1C1-referansestiler, lokale navn, strukturerte referanser, formelavhengigheter, matriserøtter, typede Excel-feilverdier, volatile status, eksplisitt autorisasjon av eksterne referanser, kansellering og stabile feilkategorier deler den vanlige arbeidsbok-evaluatoren
CreateFormulaEvaluationTemplate kompilerer et uforanderlig anker én gang og gjenbruker det på tvers av målceller; målradfølsomme strukturerte A1-referanser løses for hver målkontekst, og grenser per kall setter grenser for formellengde, syntakselementtrinn, rekursjonsdybde og genererte matrisebyte
Se Kontekstuell formelevaluering for resultattyper, standardbudsjett, levetidsregler og Delphi- eller C++Builder-eksempler
Matriseoperatorer
Aritmetiske operatorer, sammenligningsoperatorer, sammensetningsoperatorer, unær negasjon og prosentoperatorer godtar beregnede matriser så vel som skalarverdier
En skalar spres på tvers av alle elementer, og en matrise med én rad eller én kolonne spres på tvers av en kompatibel dimensjon; inkompatible former returnerer #VALUE!
Feil beholdes i sine enkelte resultatceller, så én divisjon med null eller ett ugyldig element forkaster ikke verdiene som er beregnet for de resterende cellene
COMBINA og PERMUTATIONA deler skalar- og broadcast-matrisesemantikk med avkortede ikke-negative heltallsargumenter og kontrollert overflow, mens MUNIT returnerer en kompakt todimensjonal Double-identitetsmatrise
FormulaArrayMemoryLimit har standardverdien 64 MiB og setter grensen for genererte matrisenyttelaster; MUNIT validerer også det gjenværende spill-området i regnearket i stedet for å pålegge et fast dimensjonstak
Inspeksjon av formeltilstedeværelse
ISFORMULA(reference) undersøker formeleierskap uten å beregne den refererte cellen, så en formel forblir detekterbar når det bufrede resultatet er en feil eller en tom streng
Et rektangulært område returnerer en boolsk matrise med samme form; medlemmer av delte formler og av klassiske eller XLSX-matriseformler returnerer true, mens bare ankeret i et dynamisk spill er en formelcelle
Direkte verdier og skalars definerte navn returnerer #VALUE!, ugyldige referanser bevarer #REF!, og genererte boolske matriser begrenses av FormulaArrayMemoryLimit
XLSX skriver _xlfn.ISFORMULA og gjenoppretter det bare navnet ved åpning, ODS bruker standard syntaks of:=ISFORMULA, og klassisk XLS-utdata avviser den ustøttede future-funksjonen før dataene lagres
Moderne tekstfunksjoner
UNICHAR avkorter numeriske inndata mot null og konverterer gyldige Unicode-skalarverdier til UTF-16, inkludert surrogatpar-utdata for supplerende plan og alle private use-områder
Null- og utenfor-område-inndata returnerer #VALUE!, mens isolerte surrogatkodepunkter og Unicode-noncharacters returnerer #N/A; område- og genererte matriseinndata bevarer disse feilene per element
BAHTTEXT konverterer endelige tall til thailandsk baht- og satang-tekst, runder midtpunktverdier bort fra null med to desimaler, beholder et negativt fortegn når den avrundede størrelsen blir null, og ekspanderer vitenskapelig notasjon uten å klemme inn gjennom en heltallstype
XLSX lagrer UNICHAR som _xlfn.UNICHAR og gjenoppretter det bare navnet ved gjenåpning; BAHTTEXT bruker sin standard funksjonsidentitet og forblir bart i XLS- og XLSX-formler
Regresjon og prediksjon
LINEST og LOGEST godtar én eller flere prediktorkolonner eller -rader og returnerer koeffisientene i Excel-rekkefølge, etterfulgt av det valgfrie konstantleddet
Når statistikkargumentet er true, returnerer begge funksjonene det komplette femraders resultatet med koeffisientfeil, tilpassingsstatistikk, F-statistikken, frihetsgrader, regresjonskvadratsummen og residualkvadratsummen
TREND og GROWTH bruker samme multivariable modell og bevarer rad- eller kolonneformen til de oppgitte nye prediktorverdiene
Klassisk XLS-avhengighetsomregning
TXLSWorkbook.Recalculate bygger en graf over formelavhengigheter ved første kall og evaluerer formler med precedenter først, i stedet for i fysisk cellerekkefølge
Senere kall gjenbruker grafen og omregner bare transitive avhengige av endrede verdier, i tillegg til flyktige formler; formelredigeringer, navn, regnearkstruktur og referanseomskrivinger ugyldiggjør grafen og bygger den opp igjen på en trygg måte
Sirkulære referanser bruker de klassiske arbeidsbokinnstillingene EnableIteration, MaxIterations og MaxIterationChange, mens UseFullPrecision=False bruker den viste tallpresisjonen på bufrede resultater og deres nedstrømsberegninger
Avhengigheter for definerte navn
Inkrementell beregning følger navn med arbeidsbok- og regnearkomfang gjennom nestede formler og referanser med flere områder
Syklufrie navneformler bidrar med sine eksakte celleavhengigheter, mens rekursive navnesykluser trygt faller tilbake til flyktig omregning
What-If-datatabeller
Både klassiske XLS- og moderne XLSX-regneark kan opprette, beregne, lese, skrive, kopiere og strukturelt justere What-If-datatabeller med én eller to variabler
function AddDataTable( const AResultRange, ARowInputCell, AColumnInputCell: WideString ): TXLSDataTable;
Resultatområdet inneholder bare beregnede utdataceller, mens formler og prøveverdier bruker de omkringliggende cellene i samme oppsett som Excel
- Tabell med kolonneinndata — la
ARowInputCellstå tom, plasser en kildeformel over hver resultatkolonne, og plasser prøveverdiene til venstre for resultatradene - Tabell med radinndata — la
AColumnInputCellstå tom, plasser en kildeformel til venstre for hver resultatrad, og plasser prøveverdiene over resultatkolonnene - Tabell med to variabler — oppgi begge inndatacellene, plasser kildeformelen over og til venstre for resultatområdet, radinndata-prøveverdiene over resultatene, og kolonneinndata-prøveverdiene til venstre
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;
Dette eksemplet med kolonneinndata beregner 3, 5 og 7 i D2:D4; hver prøveverdi brukes gjennom en isolert beregningskontekst, så formler som når B1 indirekte via andre formelceller, omregnes riktig
AddDataTable returnerer nil for et ugyldig område, en ugyldig inndatareferanse, eller når begge inndatareferansene er tomme; regnearkets DataTables-samling eksponerer den resulterende definisjonen og flaggene for slettede inndata
Sletting av en referert inndatacelle bevarer tabelldefinisjonen og returnerer #REF! for utdataene, i tråd med semantikken i den lagrede arbeidsboken
Brukerdefinerte funksjoner
Utvid formelmotoren med tilpasset forretningslogikk; registrer dine egne funksjoner via hendelsene nedenfor
Farlige eksterne navn og navn i makrostil avslås før argumenter eller handlere kjøres, med mindre arbeidsboken eller en individuell kontekstuell evaluering eksplisitt aktiverer AllowUnsafeFormulaCallbacks
- Hendelsen OnUserFunction — Håndter grunnleggende brukerdefinerte funksjoner
- Hendelsen OnUserFunctionEx — Løs komplekse funksjoner med parametere for celleområder
- Tilbakekall for brukerfunksjon — Signaturkrav til eksterne handlere