Documentazione HotXLS

Valutazione contestuale delle formule

I fogli di lavoro XLS classici e XLSX espongono la stessa API di sola lettura per valutare il testo di una formula come se fosse stato immesso in una riga e una colonna scelte in base 1

Valutazione in un'unica operazione

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;
Il foglio di lavoro fornisce il contesto di nomi locali, riferimenti non qualificati, tabelle e collegamenti esterni senza modificare il foglio attivo, la selezione, il modello di celle, la cache delle formule, lo stato di modifiche né il grafo delle dipendenze
xlfrsA1 preserva i riferimenti assoluti e misti mentre risolve i riferimenti relativi a partire dalla cella di destinazione; xlfrsR1C1 risolve direttamente gli offset relativi da quella destinazione

Risultati tipizzati

TXLSFormulaEvaluationResult restituisce Status, la Valuetipizzata originale, IsVolatilee un record Issue stabile contenente stato, codice nativo e messaggio
TXLSFormulaEvaluationStatus = (xlfeOk, xlfeInvalidArgument,
  xlfeWorksheetUnavailable, xlfeParseError, xlfeUnsupportedFunction,
  xlfeCircularReference, xlfeExternalReferenceDenied, xlfeCancelled,
  xlfeResourceLimit, xlfeFailed, xlfeUnsafeFunctionDenied);

TXLSFormulaEvaluationIssue = record
  Status: TXLSFormulaEvaluationStatus;
  NativeCode: Integer;
  Message: WideString;
end;
    
I valori delle formule come #DIV/0!, #REF!, le stringhe vuote, le matrici, i valori booleani e le date restano valori distinguibili; gli errori di analisi, le funzioni non supportate, i riferimenti circolari, i riferimenti esterni negati, i callback non sicuri negati, l'annullamento, gli argomenti non validi, i fogli di lavoro non disponibili e l'esaurimento delle risorse usano stati API espliciti Issue.NativeCode riporta il codice di errore del motore sottostante e Issue.Message the human-readable description when Status is not xlfeOk

Modelli immutabili riutilizzabili

function CreateFormulaEvaluationTemplate(Row, Col: Integer;
  const Formula: WideString;
  ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
Un modello compila la formula una sola volta alla sua ancora ed espone EvaluateAt ed EvaluateAtWithOptions per valutazioni ripetute su celle di destinazione diverse
Le formule A1 e R1C1 ordinarie riutilizzano direttamente l'albero compilato; i riferimenti strutturati A1 il cui significato dipende dalla riga della tabella di destinazione vengono risolti e compilati per quel contesto di destinazione
I modelli non conservano alcuno stato scrivibile del foglio di lavoro, segnalano in sicurezza xlfeWorksheetUnavailable dopo la distruzione del workbook e passano a una ricompilazione consapevole del contesto quando le modifiche del workbook rendono obsoleto il contesto compilato originale

Opzioni di risorse, riferimenti esterni e callback

AllowExternalReferencesIl valore predefinito è true, ma consente solo destinazioni dell'area di lavoro registrate esplicitamente o cache locali al file e non esegue mai accessi impliciti a file o rete
AllowUnsafeFormulaCallbacksIl valore predefinito è false e blocca i nomi di funzioni pericolose prima che raggiungano un registro di funzioni utente o un callback, prima della valutazione di qualsiasi argomento; il rifiuto restituisce xlfeUnsafeFunctionDenied
CancelFlagPuntatore booleano facoltativo verificato prima e dopo la valutazione
MaxFormulaLengthIl valore predefinito è 8192 unità di codice UTF-16
MaxEvaluationStepsIl valore predefinito è 1,000,000 valutazioni di elementi di sintassi
MaxRecursionDepthIl valore predefinito è 256 valutazioni di formule annidate
MaxArrayBytesIl valore predefinito è 64 MiB per i payload delle matrici generate
Un massimo zero o negativo disabilita quel limite per chiamata; la politica di memoria delle matrici a livello di workbook resta applicata e il raggiungimento di un limite abilitato restituisce xlfeResourceLimit dopo il rilascio dello stato di valutazione temporaneo
L'overload che accetta opzioni esplicite considera AllowUnsafeFormulaCallbacks autorevole per quella chiamata; la valutazione predefinita in un'unica operazione e quella dei modelli ereditano la proprietà del workbook con lo stesso nome

Esempio Delphi

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);

Esempio C++Builder

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

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

Vedere anche

Metodo TXLSWorksheet.Calculate
Metodo IXLSWorkbook.Calculate
Motore di calcolo Excel