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
| AllowExternalReferences | Il 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 |
| AllowUnsafeFormulaCallbacks | Il 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 |
| CancelFlag | Puntatore booleano facoltativo verificato prima e dopo la valutazione |
| MaxFormulaLength | Il valore predefinito è 8192 unità di codice UTF-16 |
| MaxEvaluationSteps | Il valore predefinito è 1,000,000 valutazioni di elementi di sintassi |
| MaxRecursionDepth | Il valore predefinito è 256 valutazioni di formule annidate |
| MaxArrayBytes | Il 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