HotXLS-dokumentasjon

Kontekstavhengig formelevaluering

Classic XLS- og XLSX-regneark eksponerer den samme skrivebeskyttede API-en for å evaluere formeltekst som om den hadde blitt angitt i en valgt énbasert rad og kolonne

Engangsevaluering

function EvaluateFormulaAt(Row, Col: Integer;
  const Formula: WideString): TXLSFormulaEvaluationResult; overload;

function EvaluateFormulaAt(Row, Col: Integer;
  const Formula: WideString;
  ReferenceStyle: TXLSFormulaReferenceStyle;
  const Options: TXLSFormulaEvaluationOptions): TXLSFormulaEvaluationResult; overload;
Regnearket leverer konteksten for lokale navn, ukvalifiserte referanser, tabeller og eksterne koblinger uten å endre aktivt ark, utvalg, cellemodell, formelbuffer, skitten-tilstand eller avhengighetsgraf
xlfrsA1 bevarer absolutte og blandede referanser mens relative referanser løses fra målcellen; xlfrsR1C1 løser relative forskyvninger direkte fra det målet

Typede resultater

TXLSFormulaEvaluationResult returnerer Status, den opprinnelige typede Value, IsVolatile og en stabil Issue-post som inneholder status, underliggende kode og melding
TXLSFormulaEvaluationStatus = (xlfeOk, xlfeInvalidArgument,
  xlfeWorksheetUnavailable, xlfeParseError, xlfeUnsupportedFunction,
  xlfeCircularReference, xlfeExternalReferenceDenied, xlfeCancelled,
  xlfeResourceLimit, xlfeFailed, xlfeUnsafeFunctionDenied);

TXLSFormulaEvaluationIssue = record
  Status: TXLSFormulaEvaluationStatus;
  NativeCode: Integer;
  Message: WideString;
end;
    
Formelverdier som #DIV/0!, #REF!, tomme strenger, matriser, boolske verdier og datoer forblir skillebare verdier; tolkefeil, ustøttede funksjoner, sirkulære referanser, avslåtte eksterne referanser, avslåtte utrygge Callback, avbrudd, ugyldige argumenter, utilgjengelige regneark og oppbrukte ressurser bruker eksplisitte API-statuser. Issue.NativeCode bærer den underliggende motorfeilkoden og Issue.Message den lesbare beskrivelsen når Status ikke er xlfeOk

Gjenbrukbare uforanderlige maler

function CreateFormulaEvaluationTemplate(Row, Col: Integer;
  const Formula: WideString;
  ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
En mal kompilerer formelen én gang ved sitt anker og eksponerer EvaluateAt og EvaluateAtWithOptions for gjentatt evaluering ved ulike målceller
Vanlige A1- og R1C1-formler gjenbruker det kompilerte treet direkte; A1-strukturerte referanser hvis betydning avhenger av måltabellraden, løses og kompileres for den målkonteksten
Maler holder ingen skrivbar regnearktilstand, rapporterer trygt xlfeWorksheetUnavailable etter arbeidsbokdestruksjon og faller tilbake til kontekstbevisst rekompilering når arbeidsbokendringer gjør den opprinnelige kompilerte konteksten utdatert

Ressurs-, eksternreferanse- og tilbakekallingsvalg

AllowExternalReferencesHar sann som standard, men tillater bare eksplisitt registrerte arbeidsområdemål eller fillokale buffere og utfører aldri implisitt fil- eller nettverkstilgang
AllowUnsafeFormulaCallbacksHar usann som standard og blokkerer farlige funksjonsnavn fra å nå et brukerfunksjonsregister eller tilbakekalling før noe argument er evaluert; avslag returnerer xlfeUnsafeFunctionDenied
CancelFlagValgfri Boolean-peker som sjekkes før og etter evaluering
MaxFormulaLengthHar 8192 UTF-16 kodeenheter som standard
MaxEvaluationStepsHar 1,000,000 evalueringer av syntakselementer som standard
MaxRecursionDepthHar 256 nestede formelevalueringer som standard
MaxArrayBytesHar 64 MiB for genererte matrisenyttelaster som standard
En null eller negativ maksgrense deaktiverer grensen per kall; den arbeidsbokomfattende minnepolicyen for matriser gjelder fortsatt, og når en aktivert grense nås, returneres xlfeResourceLimit etter frigjøring av midlertidig evalueringstilstand
Overbelastningen som godtar eksplisitte valg, behandler AllowUnsafeFormulaCallbacks som autoritativ for det kallet; standard engangs- og malevaluering arver arbeidsbokens egenskap med samme navn

Delphi-eksempel

Template := Sheet.CreateFormulaEvaluationTemplate(2, 2,
  '=R[-1]C[-1]+1', xlfrsR1C1);

Result := Template.EvaluateAt(2, 2);
if Result.Status = xlfeOk then
  UseValue(Result.Value);

Options := XLSDefaultFormulaEvaluationOptions;
Options.MaxEvaluationSteps := 10000;
Result := Template.EvaluateAtWithOptions(20, 4, Options);

C++Builder-eksempel

Lxcalc::_di_IXLSFormulaEvaluationTemplate evalTemplate =
  sheet->CreateFormulaEvaluationTemplate(1, 1,
    WideString(L"=ROW()+COLUMN()"), Lxcalc::xlfrsA1);

Lxcalc::TXLSFormulaEvaluationResult result =
  evalTemplate->EvaluateAt(7, 8);

Se også

TXLSWorksheet.Calculate-metode
IXLSWorkbook.Calculate-metode
Excel-beregningsmotor