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
| AllowExternalReferences | Har sann som standard, men tillater bare eksplisitt registrerte arbeidsområdemål eller fillokale buffere og utfører aldri implisitt fil- eller nettverkstilgang |
| AllowUnsafeFormulaCallbacks | Har usann som standard og blokkerer farlige funksjonsnavn fra å nå et brukerfunksjonsregister eller tilbakekalling før noe argument er evaluert; avslag returnerer xlfeUnsafeFunctionDenied |
| CancelFlag | Valgfri Boolean-peker som sjekkes før og etter evaluering |
| MaxFormulaLength | Har 8192 UTF-16 kodeenheter som standard |
| MaxEvaluationSteps | Har 1,000,000 evalueringer av syntakselementer som standard |
| MaxRecursionDepth | Har 256 nestede formelevalueringer som standard |
| MaxArrayBytes | Har 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å