HotXLS-dokumentation

Excel-beräkningsmotor

Översikt

HotXLS innehåller en inbyggd motor för tolkning och beräkning av formler; motorn utvärderar cellformler programmatiskt i din process och eliminerar behovet av att anropa Excel eller externa OLE-styrenheter för att lösa beräknade arbetsboksvärden

Beräkningskörning

Innan du sparar eller exporterar ska du utlösa en fullständig omberäkning av arbetsboken via huvudgränssnittet för arbetsboken

procedure Calculate;

Motorn stöder standardfamiljer för matematiska, datum-, logiska, sträng- och statistiska funktioner; den löser cellberoenden sekventiellt och följer referenskedjor för att förhindra cirkulära referenser

Kontextuell formelutvärdering

TXLSWorksheet och TXLSXWorksheet exponerar EvaluateFormulaAt för att beräkna formulertext i en vald rad och kolumn med ettbaserad numrering, utan att skriva en tillfällig cell eller ändra arbetsbokens beräkningstillstånd

A1- och R1C1-referensformat, lokala namn, strukturerade referenser, formelberoenden, array-rötter, typade Excel-felvärden, volatil status, uttrycklig auktorisering av externa referenser, annullering och stabila felkategorier hanteras av arbetsbokens normala utvärderare

CreateFormulaEvaluationTemplate kompilerar ett oföränderligt ankare en gång och återanvänder det för flera målceller; A1-strukturerade referenser som beror av målraden löses för varje målkontext, och gränser per anrop begränsar formellängd, antal syntaxsteg, rekursionsdjup och antal genererade arraybyte

Se Kontextuell formelutvärdering för resultattyper, standardbudgeter, livstidsregler och Delphi- eller C++Builder-exempel

Arrayoperatorer

Aritmetiska operatorer, jämförelseoperatorer, sammanfogningsoperatorer, unär negation och procentoperatorer accepterar beräknade arrayer liksom skalära värden

Ett skalärt värde tillämpas på varje element, och en array med en rad eller en kolumn expanderas över en kompatibel dimension; inkompatibla former returnerar #VALUE!

Fel behålls i sina enskilda resultatceller, så en enda division med noll eller ett ogiltigt element förkastar inte de värden som beräknats för de återstående cellerna

COMBINA och PERMUTATIONA har samma skalära och arrayexpanderande semantik, med trunkerade icke-negativa heltalsargument och kontrollerad overflow, medan MUNIT returnerar en kompakt tvådimensionell identitetsmatris av typen Double

FormulaArrayMemoryLimit har standardvärdet 64 MiB och begränsar de genererade matrisnyttolasterna; MUNIT validerar dessutom det återstående spillområdet i kalkylbladet i stället för att införa ett fast tak för dimensionen

Kontroll av formelförekomst

ISFORMULA(reference) kontrollerar vilka celler som innehåller formler utan att beräkna den refererade cellen, så att en formel fortfarande kan upptäckas när dess cachade resultat är ett fel eller en tom sträng

Ett rektangulärt område returnerar en boolesk array med samma form; delade formler och medlemmar i klassiska eller XLSX-matrisformler returnerar true, medan endast ankaret i ett dynamiskt spill är en formelcell

Direkta värden och skalära definierade namn returnerar #VALUE!, ogiltiga referenser bevarar #REF!, och de genererade booleska arrayerna begränsas av FormulaArrayMemoryLimit

XLSX skriver _xlfn.ISFORMULA och återställer namnet utan prefix vid öppning, ODS använder standardsyntaxen of:=ISFORMULA, och klassiska XLS-utdata avvisar den ej stödda framtida funktionen innan data skrivs

Moderna textfunktioner

UNICHAR trunkerar numeriska indata mot noll och konverterar giltiga Unicode-skalärvärden till UTF-16, inklusive surrogatpar i utdata för supplerande plan och alla privata användningsintervall

Indata som är noll eller ligger utanför intervallet returnerar #VALUE!, medan isolerade surrogatkodpunkter och Unicode-noncharacters returnerar #N/A; indata från områden och genererade arrayer bevarar dessa fel per element

BAHTTEXT konverterar ändliga tal till text i thailändska baht och satang, avrundar mittpunktsvärden från noll med två decimalers noggrannhet, behåller det negativa tecknet när den avrundade storleken blir noll, och expanderar vetenskaplig notation utan avkortning via en heltalstyp

XLSX sparar UNICHAR som _xlfn.UNICHAR och återställer namnet utan prefix när filen öppnas igen; BAHTTEXT använder sin standardfunktionsidentitet och förblir utan prefix i XLS- och XLSX-formler

Regression och prediktion

LINEST och LOGEST accepterar en eller flera prediktorkolumner eller -rader och returnerar koefficienter i Excels ordning följt av den valfria konstanttermen

När statistikargumentet är true returnerar båda funktionerna det fullständiga femradiga resultatet med koefficientfel, anpassningsstatistik, F-statistik, frihetsgrader, regressionskvadratsumma och residualkvadratsumma

TREND och GROWTH använder samma multivariabla modell och bevarar rad- eller kolumnformen för de nya prediktorvärden som anges

Omberäkning av klassiska XLS-beroenden

TXLSWorkbook.Recalculate bygger en graf över formelberoenden vid det första anropet och utvärderar formler med föregångare först i stället för i fysisk cellordning

Senare anrop återanvänder grafen och omberäknar endast transitiva beroenden till ändrade värden plus volatila formler; formelredigeringar, namn, kalkylbladsstruktur och omskrivna referenser ogiltigförklarar grafen och bygger upp den igen på ett säkert sätt

Cirkulära referenser använder arbetsbokens klassiska inställningar EnableIteration, MaxIterations och MaxIterationChange, medan UseFullPrecision=False tillämpar den visade talprecisionen på cachade resultat och deras efterföljande beräkningar

Beroenden för definierade namn

Den inkrementella beräkningen följer arbetsboks- och kalkylbladsomfattande namn genom nästlade formler och referenser till flera områden

Acykliska namnformler bidrar med sina exakta cellberoenden, medan rekursiva namncykler på ett säkert sätt faller tillbaka till volatil omberäkning

What-If-datatabeller

Både klassiska XLS- och moderna XLSX-kalkylblad kan skapa, beräkna, läsa, skriva, kopiera och strukturellt justera What-If-datatabeller med en eller två variabler

function AddDataTable(
  const AResultRange, ARowInputCell, AColumnInputCell: WideString
): TXLSDataTable;

Resultatområdet innehåller endast beräknade utdataceller, medan formler och testvärden använder de omgivande cellerna i samma layout som Excel

  • Tabell med kolumnindata — lämna ARowInputCell tomt, placera en källformel ovanför varje resultatkolumn och placera testvärdena till vänster om resultatrader
  • Tabell med radindata — lämna AColumnInputCell tomt, placera en källformel till vänster om varje resultatrad och placera testvärdena ovanför resultatkolumnerna
  • Tabell med två variabler — ange båda indatancellerna, placera källformeln ovanför och till vänster om resultatområdet, radindatans testvärden ovanför resultaten och kolumnindatans testvärden till vänster
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;

Det här exemplet med kolumnindata beräknar 3, 5 och 7 i D2:D4; varje testvärde tillämpas via en isolerad beräkningskontext, så formler som når B1 indirekt via andra formelceller omberäknas korrekt

AddDataTable returnerar nil för ett ogiltigt område, en ogiltig indatreferens eller när båda indatreferenserna är tomma; kalkylbladets samling DataTables exponerar den resulterande definitionen och dess flaggor för borttagna indata

Om en refererad indatancell tas bort bevaras tabelldefinitionen, och utdatacellerna returnerar #REF!, vilket motsvarar semantiken i den lagrade arbetsboken

Användardefinierade funktioner

Utvidga formelmotorn med anpassad affärslogik; registrera dina egna funktioner via händelserna nedan

Farliga externa namn och namn i makrostil nekas innan argumenten eller hanterarna körs, om inte arbetsboken eller en enskild kontextuell utvärdering uttryckligen aktiverar AllowUnsafeFormulaCallbacks