HotXLS-dokumentation

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 ARowInputCell være tom, anbring en kildeformel over hver resultatkolonne, og anbring forsøgsværdierne til venstre for resultatrækkerne
  • Tabel med rækkeinput — lad AColumnInputCell væ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