HotXLS-documentatie

Contextuele formule-evaluatie

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

AllowExternalReferencesStaat standaard op true maar staat alleen expliciet geregistreerde werkruimtedoelen of bestandslokale caches toe en voert nooit impliciete bestands- of netwerktoegang uit
AllowUnsafeFormulaCallbacksStaat standaard op false en blokkeert gevaarlijke functienamen voordat een argument wordt geëvalueerd, zodat ze een gebruikersfunctieregister of callback niet bereiken; weigering geeft xlfeUnsafeFunctionDenied
CancelFlagOptionele booleaanse aanwijzer die vóór en na de evaluatie wordt gecontroleerd
MaxFormulaLengthStandaard 8192 UTF-16-code-eenheden
MaxEvaluationStepsStandaard 1.000.000 evaluaties van syntactische elementen
MaxRecursionDepthStandaard 256 geneste formule-evaluaties
MaxArrayBytesStandaard 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

TXLSWorksheet.Calculate-methode
IXLSWorkbook.Calculate-methode
Excel-berekeningsengine