Klassiske XLS- og XLSX-regneark stiller den samme skrivebeskyttede API til rådighed til evaluering af formeltekst, som om den var indtastet i en valgt 1-baseret række 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 navne, ukvalificerede referencer, tabeller og eksterne links uden at ændre det aktive ark, markeringen, cellemodulet, formelcachen, dirty-tilstanden eller afhængighedsgrafen
xlfrsA1 bevarer absolutte og blandede referencer, mens relative referencer løses fra målcellen; xlfrsR1C1 løser relative forskydninger direkte fra dette mål
Typede resultater
TXLSFormulaEvaluationResult returnerer Status, den oprindelige typede Value, IsVolatileog en stabil Issue -post med status, oprindelig kode og meddelelse
TXLSFormulaEvaluationStatus = (xlfeOk, xlfeInvalidArgument,
xlfeWorksheetUnavailable, xlfeParseError, xlfeUnsupportedFunction,
xlfeCircularReference, xlfeExternalReferenceDenied, xlfeCancelled,
xlfeResourceLimit, xlfeFailed, xlfeUnsafeFunctionDenied);
TXLSFormulaEvaluationIssue = record
Status: TXLSFormulaEvaluationStatus;
NativeCode: Integer;
Message: WideString;
end;
Formelværdier som #DIV/0!, #REF!, tomme strenge, matrixer, booleske værdier og datoer forbliver skelnelige værdier; parsefejl, ikke-understøttede funktioner, cirkulære referencer, afviste eksterne referencer, afviste usikre callbacks, annullering, ugyldige argumenter, utilgængelige regneark og opbrugte ressourcer bruger eksplicitte API-statusser Issue.NativeCode bærer den underliggende motorfejlkode og Issue.Message the human-readable description when Status is not xlfeOk
Genanvendelige uforanderlige skabeloner
function CreateFormulaEvaluationTemplate(Row, Col: Integer;
const Formula: WideString;
ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
En skabelon kompilerer formlen én gang ved sit anker og eksponerer EvaluateAt og EvaluateAtWithOptions til gentagen evaluering i forskellige målceller
Almindelige A1- og R1C1-formler genbruger det kompilerede træ direkte; A1-strukturerede referencer, hvis betydning afhænger af måltabellens række, løses og kompileres til den pågældende målkontekst
Skabeloner gemmer ingen skrivbar regnearkstilstand, rapporterer sikkert xlfeWorksheetUnavailable efter projektmappens destruktion og falder tilbage til kontekstbevidst rekompilering, når projektmappeændringer gør den oprindelige kompilerede kontekst forældet
Ressource-, ekstern reference- og callback-indstillinger
| AllowExternalReferences | Standard er true, men tillader kun eksplicit registrerede arbejdsområdemål eller fil-lokale caches og udfører aldrig implicit fil- eller netværksadgang |
| AllowUnsafeFormulaCallbacks | Standard er false og blokerer farlige funktionsnavne fra at nå et brugerfunktionsregister eller callback, før noget argument er evalueret; afvisning returnerer xlfeUnsafeFunctionDenied |
| CancelFlag | Valgfri boolesk pointer, der kontrolleres før og efter evaluering |
| MaxFormulaLength | Standard er 8192 UTF-16-kodeenheder |
| MaxEvaluationSteps | Standard er 1.000.000 evalueringer af syntakselementer |
| MaxRecursionDepth | Standard er 256 indlejrede formelevalueringer |
| MaxArrayBytes | Standard er 64 MiB til genererede matrix-payloads |
En nul- eller negativ maksimumsværdi deaktiverer den grænse pr. kald; projektmappens matrixhukommelsespolitik gælder stadig, og en nået aktiv grænse returnerer xlfeResourceLimit , efter at midlertidig evalueringstilstand er frigivet
Overloadet, der accepterer eksplicitte indstillinger, behandler AllowUnsafeFormulaCallbacks som autoritativt for det kald; standard engangs- og skabelonevaluering arver projektmappens egenskab 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å