Klassieke XLS- en XLSX-werkbladen leggen dezelfde alleen-lezen API bloot om formuletekst te evalueren alsof deze is ingevoerd in een gekozen rij en kolom met basis 1
Eenmalige evaluatie
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;
Het werkblad levert de context voor lokale namen, niet-gekwalificeerde verwijzingen, tabellen en externe koppelingen, zonder het actieve werkblad, de selectie, het celmodel, de formulecache, de dirty-status of de afhankelijkheidsgrafiek te wijzigen
xlfrsA1 behoudt absolute en gemengde verwijzingen en lost relatieve verwijzingen op vanuit de doelcel; xlfrsR1C1 lost relatieve verschuivingen rechtstreeks vanuit die doelcel op
Getypeerde resultaten
TXLSFormulaEvaluationResult geeft Status, de oorspronkelijke getypeerde Value, IsVolatileen een stabiel Issue -record terug met status, native code en melding
TXLSFormulaEvaluationStatus = (xlfeOk, xlfeInvalidArgument,
xlfeWorksheetUnavailable, xlfeParseError, xlfeUnsupportedFunction,
xlfeCircularReference, xlfeExternalReferenceDenied, xlfeCancelled,
xlfeResourceLimit, xlfeFailed, xlfeUnsafeFunctionDenied);
TXLSFormulaEvaluationIssue = record
Status: TXLSFormulaEvaluationStatus;
NativeCode: Integer;
Message: WideString;
end;
Formulewaarden zoals #DIV/0!, #REF!, lege tekenreeksen, arrays, booleaanse waarden en datums blijven onderscheidbare waarden; parsefouten, niet-ondersteunde functies, kringverwijzingen, geweigerde externe verwijzingen, geweigerde onveilige callbacks, annulering, ongeldige argumenten, onbeschikbare werkbladen en uitputting van bronnen gebruiken expliciete API-statussen Issue.NativeCode bevat de onderliggende engine-foutcode en Issue.Message the human-readable description when Status is not xlfeOk
Herbruikbare onveranderlijke sjablonen
function CreateFormulaEvaluationTemplate(Row, Col: Integer;
const Formula: WideString;
ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
Een sjabloon compileert de formule één keer op zijn anker en stelt EvaluateAt en EvaluateAtWithOptions bloot voor herhaalde evaluatie op andere doelcellen
Gewone A1- en R1C1-formules hergebruiken de gecompileerde boom rechtstreeks; A1-gestructureerde verwijzingen waarvan de betekenis van de doeltabelrij afhangt, worden voor die doelcontext opgelost en gecompileerd
Sjablonen houden geen schrijfbare werkbladstatus vast, melden na vernietiging van de werkmap veilig xlfeWorksheetUnavailable en vallen terug op contextbewuste hercompilatie wanneer werkmapwijzigingen de oorspronkelijke gecompileerde context verouderd maken
Opties voor resources, externe verwijzingen en callbacks
| AllowExternalReferences | Staat standaard op true maar staat alleen expliciet geregistreerde werkruimtedoelen of bestandslokale caches toe en voert nooit impliciete bestands- of netwerktoegang uit |
| AllowUnsafeFormulaCallbacks | Staat standaard op false en blokkeert gevaarlijke functienamen voordat een argument wordt geëvalueerd, zodat ze een gebruikersfunctieregister of callback niet bereiken; weigering geeft xlfeUnsafeFunctionDenied |
| CancelFlag | Optionele booleaanse aanwijzer die vóór en na de evaluatie wordt gecontroleerd |
| MaxFormulaLength | Standaard 8192 UTF-16-code-eenheden |
| MaxEvaluationSteps | Standaard 1.000.000 evaluaties van syntactische elementen |
| MaxRecursionDepth | Standaard 256 geneste formule-evaluaties |
| MaxArrayBytes | Standaard 64 MiB voor gegenereerde array-payloads |
Een maximum van nul of negatief schakelt die limiet per aanroep uit; het geheugenbeleid voor arrays op werkmapniveau blijft gelden, en het bereiken van een actieve limiet geeft xlfeResourceLimit terug nadat de tijdelijke evaluatiestatus is vrijgegeven
De overload die expliciete opties accepteert, behandelt AllowUnsafeFormulaCallbacks als leidend voor die aanroep; standaard eenmalige evaluatie en sjabloonevaluatie erven de gelijknamige werkmapeigenschap
Delphi-voorbeeld
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-voorbeeld
Lxcalc::_di_IXLSFormulaEvaluationTemplate evalTemplate =
sheet->CreateFormulaEvaluationTemplate(1, 1,
WideString(L"=ROW()+COLUMN()"), Lxcalc::xlfrsA1);
Lxcalc::TXLSFormulaEvaluationResult result =
evalTemplate->EvaluateAt(7, 8);Zie ook