Excel-beregningsemaskine
Oversigt
HotXLS indeholder en indbygget maskine til parsing og beregning af formler; denne maskine evaluerer celleformler programmatisk inden for din proces og fjerner behovet for at kalde Excel eller eksterne OLE-controllere for at løse beregnede projektmappeværdier
Beregningseksekvering
Før du gemmer eller eksporterer, skal du udløse en fuld genberegning af projektmappe via hovedgrænsefladen for projektmappe
procedure Calculate;
Maskinen understøtter standardfamilier af matematiske, dato-, logiske, streng- og statistiske funktioner; den løser sekventielt celleafhængigheder og følger referencekæder for at forhindre cirkulære referencer
Kontekstuel formelevaluering
TXLSWorksheet og TXLSXWorksheet eksponerer EvaluateFormulaAt, som beregner formulartekst i en valgt række og kolonne (1-baseret) uden at skrive en midlertidig celle eller ændre projektmappens beregningstilstand
A1- og R1C1-referencetypografier, lokale navne, strukturerede referencer, formelafhængigheder, array-rødder, typede Excel-fejlværdier, flygtig status, eksplicit godkendelse af eksterne referencer, annullering og stabile fejlkategorier bruger alle den almindelige projektmappe-evaluator
CreateFormulaEvaluationTemplate kompilerer et uforanderligt anker én gang og genbruger det på tværs af målceller; A1-strukturerede referencer, der er følsomme over for målrækken, opløses for hver målkontekst, og grænser pr. kald begrænser formellængde, antal syntakselementtrin, rekursionsdybde og genererede array-bytes
Se Kontekstuel formelevaluering for resultattyper, standardbudgetter, levetidsregler og Delphi- eller C++Builder-eksempler
Array-operatorer
Operatorerne for aritmetik, sammenligning, konkatenering, unær negation og procent accepterer beregnede arrays samt skalare værdier
En skalar udbredes til alle elementer, og et array med én række eller én kolonne udbredes på tværs af en kompatibel dimension; inkompatible former returnerer #VALUE!
Fejl bevares i deres enkelte resultatceller, så én division med nul eller ét ugyldigt element kasserer ikke de værdier, der er beregnet for de resterende celler
COMBINA og PERMUTATIONA deler skalar- og broadcast-array-semantik med trunkerede ikke-negative heltalsargumenter og kontrolleret overflow, mens MUNIT returnerer en kompakt todimensional Double-identitetsmatrix
FormulaArrayMemoryLimit er som standard 64 MiB og begrænser genererede matrixpayloads; MUNIT validerer også det resterende spill-område i regnearket i stedet for at pålægge et fast dimensionsloft
Inspektion af formulertilstedeværelse
ISFORMULA(reference) undersøger formelejerskab uden at beregne den refererede celle, så en formel forbliver detekterbar, selv når dens cachede resultat er en fejl eller en tom streng
Et rektangulært område returnerer et Boolean-array med samme form; medlemmer af delte formler og af klassiske eller XLSX-arrayformler returnerer true, mens kun ankeret i et dynamisk spill er en formelcelle
Direkte værdier og skalare definerede navne returnerer #VALUE!, ugyldige referencer bevarer #REF!, og genererede Boolean-arrays begrænses af FormulaArrayMemoryLimit
XLSX skriver _xlfn.ISFORMULA og gendanner det bare navn ved åbning, ODS bruger standardsyntaksen of:=ISFORMULA, og klassisk XLS-output afviser den ikke-understøttede fremtidsfunktion, før data fastlægges
Moderne tekstfunktioner
UNICHAR trunkerer numeriske input mod nul og konverterer gyldige Unicode-skalærværdier til UTF-16, herunder surrogatepar-output for supplerende planer og alle private-use-områder
Nul og input uden for intervallet returnerer #VALUE!, mens isolerede surrogate-kodepunkter og Unicode-noncharacters returnerer #N/A; område- og genererede array-input bevarer disse fejl pr. element
BAHTTEXT konverterer endelige tal til thailandsk baht- og satang-tekst, runder midtpunktværdier bort fra nul med to decimaler, bevarer et minustegn, når den rundede størrelse bliver nul, og udvider videnskabelig notation uden at indsnævre via en heltalstype
XLSX gemmer UNICHAR som _xlfn.UNICHAR og gendanner det bare navn ved genåbning; BAHTTEXT bruger sin standardfunktionsidentitet og forbliver uden præfiks i XLS- og XLSX-formler
Regression og prædiktion
LINEST og LOGEST accepterer én eller flere prædiktorkolonner eller -rækker og returnerer koefficienter i Excel-rækkefølge efterfulgt af det valgfrie skæringspunkt
Når statistikargumentet er true, returnerer begge funktioner det komplette resultat på fem rækker med koefficientfejl, tilpasningsstatistik, F-statistik, frihedsgrader, regressionens kvadratsum og residualernes kvadratsum
TREND og GROWTH bruger samme multivariable model og bevarer række- eller kolonneformen for de angivne nye prædiktorværdier
Genberegning af klassiske XLS-afhængigheder
TXLSWorkbook.Recalculate opbygger en formelafhængighedsgraf ved første kald og evaluerer formler med præcedenser først i stedet for i fysisk cellerækkefølge
Senere kald genbruger grafen og genberegner kun transitive afhængige af ændrede værdier samt flygtige formler; formelredigeringer, navne, regnearksstruktur og referenceomskrivninger ugyldiggør og genopbygger grafen sikkert
Cirkulære referencer bruger projektmappens klassiske indstillinger EnableIteration, MaxIterations og MaxIterationChange, mens UseFullPrecision=False anvender den viste talpræcision på cachede resultater og deres downstream-beregninger
Afhængigheder for definerede navne
Inkrementel beregning følger navne med projektmappe- eller regnearksomfang gennem indlejrede formler og referencer, der dækker flere områder
Acycliske navneformler bidrager med deres præcise celleafhængigheder, mens rekursive navncykler sikkert falder tilbage til flygtig genberegning
What-If-datatabeller
Både klassiske XLS- og moderne XLSX-regneark kan oprette, beregne, læse, skrive, kopiere og strukturelt justere What-If-datatabeller med én eller to variabler
function AddDataTable( const AResultRange, ARowInputCell, AColumnInputCell: WideString ): TXLSDataTable;
Resultatområdet indeholder kun beregnede outputceller, mens formler og forsøgsværdier bruger de omgivende celler i samme layout som Excel
- Tabel med kolonneinput — lad
ARowInputCellvære tom, anbring en kildeformel over hver resultatkolonne, og anbring forsøgsværdierne til venstre for resultatrækkerne - Tabel med rækkeinput — lad
AColumnInputCellvære tom, anbring en kildeformel til venstre for hver resultatrække, og anbring forsøgsværdierne over resultatkolonnerne - Tabel med to variabler — angiv begge inputceller, anbring kildeformlen over og til venstre for resultatområdet, forsøgsværdier for rækkeinput over resultaterne og forsøgsværdier for kolonneinput 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 eksempel med kolonneinput beregner 3, 5 og 7 i D2:D4; hver forsøgsværdi anvendes gennem en isoleret beregningskontekst, så formler, der når B1 indirekte via andre formelceller, genberegnes korrekt
AddDataTable returnerer nil ved et ugyldigt område, en ugyldig inputreference eller når begge inputreferencer er tomme; regnearkets DataTables-samling eksponerer den resulterende definition og dens flag for slettede input
Sletning af en refereret inputcelle bevarer tabeldefinitionen og returnerer #REF! for dens outputs, i overensstemmelse med den gemte projektmappes semantik
Brugerdefinerede funktioner
Udvid formel-maskinen med tilpasset forretningslogik; registrer dine egne funktioner via hændelserne nedenfor
Farlige eksterne og makroagtige navne afvises, før argumenter eller handlere kører, medmindre projektmappen eller en individuel kontekstuel evaluering eksplicit aktiverer AllowUnsafeFormulaCallbacks
- Hændelsen OnUserFunction — Håndter grundlæggende brugerdefinerede funktioner
- Hændelsen OnUserFunctionEx — Løs komplekse funktioner med parametre for celleområder
- Tilbagekald for brugerfunktion — Signaturkrav til eksterne handlere