HotXLS-dokumentation

Sammanhangsberoende formelutvärdering

Classic XLS- och XLSX-kalkylblad exponerar samma skrivskyddade API för att utvärdera formeltext som om den hade matats in i en vald ettabaserad rad och kolumn

Engångsutvärdering

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;
Kalkylbladet tillhandahåller kontexten för lokala namn, okvalificerade referenser, tabeller och externa länkar utan att ändra aktivt blad, markering, cellmodell, formelcache, smutsigt tillstånd eller beroendegraf
xlfrsA1 bevarar absoluta och blandede referenser medan relativa referenser löses från målcellen; xlfrsR1C1 löser relativa förskjutningar direkt från det målet

Typade resultat

TXLSFormulaEvaluationResult returnerar Status, det ursprungliga typade Value, IsVolatileoch en stabil Issue -post som innehåller status, underliggande kod och meddelande
TXLSFormulaEvaluationStatus = (xlfeOk, xlfeInvalidArgument,
  xlfeWorksheetUnavailable, xlfeParseError, xlfeUnsupportedFunction,
  xlfeCircularReference, xlfeExternalReferenceDenied, xlfeCancelled,
  xlfeResourceLimit, xlfeFailed, xlfeUnsafeFunctionDenied);

TXLSFormulaEvaluationIssue = record
  Status: TXLSFormulaEvaluationStatus;
  NativeCode: Integer;
  Message: WideString;
end;
    
Formelvärden som tomma strängar, matriser, booleska värden och datum förblir åtskilda värden; tolkningsfel, funktioner som inte stöds, cirkulära referenser, avvisade externa referenser, avvisade osäkra återanrop, avbrott, ogiltiga argument, otillgängliga kalkylblad och resursbrist använder explicita API-statusar #DIV/0!, #REF!, tomma strängar, arrayer, booleska värden och datum förblir åtskiljbara värden; parse-fel, funktioner som inte stöds, cirkulära referenser, nekade externa referenser, nekade osäkra callbacks, annullering, ogiltiga argument, otillgängliga kalkylblad och resursutmattning använder explicita API-statusar. Issue.NativeCode bär den underliggande motorkoden och Issue.Message the human-readable description when Status is not xlfeOk

Återanvändbara oföränderliga mallar

function CreateFormulaEvaluationTemplate(Row, Col: Integer;
  const Formula: WideString;
  ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
En mall kompilerar formeln en gång vid sitt ankare och exponerar EvaluateAt och EvaluateAtWithOptions för upprepad utvärdering vid olika målceller
Vanliga A1- och R1C1-formler återanvänder det kompilerade trädet direkt; A1-strukturerade referenser vars betydelse beror på måltabellraden löses och kompileras för den målkontexten
Mallar håller inget skrivbart kalkylbladstillstånd, rapporterar säkert xlfeWorksheetUnavailable efter arbetsboksförstörelse och faller tillbaka till sammanhangsmedveten omkompilering när arbetsboksändringar gör den ursprungliga kompilerade kontexten inaktuell

Resurs-, externreferens- och återanropsalternativ

AllowExternalReferencesHar sant som standard men tillåter endast explicit registrerade arbetsytemål eller fillokala cachar och utför aldrig implicit fil- eller nätverksåtkomst
AllowUnsafeFormulaCallbacksHar falskt som standard och blockerar farliga funktionsnamn från att nå ett användarfunktionsregister eller återanrop innan något argument har utvärderats; avvisning returnerar xlfeUnsafeFunctionDenied
CancelFlagValfri Boolean-pekare som kontrolleras före och efter utvärdering
MaxFormulaLengthHar 8192 UTF-16-kodenheter som standard
MaxEvaluationStepsHar 1,000,000 utvärderingar av syntaxobjekt som standard
MaxRecursionDepthHar 256 kapslade formelutvärderingar som standard
MaxArrayBytesHar 64 MiB för genererade matrisnyttolaster som standard
Ett noll eller negativt maxvärde inaktiverar den gränsen per anrop; den arbetsboksomfattande minnespolicyn för matriser gäller fortfarande, och när en aktiverad gräns nås returneras xlfeResourceLimit efter frigivning av temporärt utvärderingstillstånd
Överlagringen som accepterar explicita alternativ behandlar AllowUnsafeFormulaCallbacks som auktoritativ för det anropet; standardmässig engångs- och mallutvärdering ärver arbetsbokens egenskap med samma namn

Delphi-exempel

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-exempel

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

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

Se även

TXLSWorksheet.Calculate-metoden
IXLSWorkbook.Calculate-metoden
Excel-beräkningsmotor