Delovni listi Classic XLS in XLSX razkrivajo isti API, ki je samo za branje, za vrednotenje besedila formule, kot da bi bila vnesena v izbrani vrstici in stolpcu s številčenjem od 1
Enkratno vrednotenje
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;
Delovni list zagotovi kontekst lokalnih imen, nekvalificiranih sklicev, tabel in zunanjih povezav, ne da bi spremenil aktivni list, izbiro, model celic, predpomnilnik formul, stanje neshranjenih sprememb ali graf odvisnosti
xlfrsA1 ohrani absolutne in mešane sklice, relativne sklice pa razreši od ciljne celice; xlfrsR1C1 relativne odmike razreši neposredno od tega cilja
Tipizirani rezultati
TXLSFormulaEvaluationResult vrne Status, izvirno tipizirano Value, IsVolatilein stabilen zapis Issue s stanjem, izvorno kodo in sporočilom
TXLSFormulaEvaluationStatus = (xlfeOk, xlfeInvalidArgument,
xlfeWorksheetUnavailable, xlfeParseError, xlfeUnsupportedFunction,
xlfeCircularReference, xlfeExternalReferenceDenied, xlfeCancelled,
xlfeResourceLimit, xlfeFailed, xlfeUnsafeFunctionDenied);
TXLSFormulaEvaluationIssue = record
Status: TXLSFormulaEvaluationStatus;
NativeCode: Integer;
Message: WideString;
end;
Vrednosti formul, kot so #DIV/0!, #REF!, prazni nizi, matrike, logične vrednosti in datumi, ostanejo razločljive vrednosti; napake razčlenjevanja, nepodprte funkcije, krožni sklici, zavrnjeni zunanji sklici, zavrnjeni nevarni povratni klici, preklic, neveljavni argumenti, nedostopni delovni listi in izčrpanost virov uporabljajo eksplicitna stanja API-ja Issue.NativeCode nosi osnovno kodo napake stroja in Issue.Message the human-readable description when Status is not xlfeOk
Večkrat uporabne nespremenljive predloge
function CreateFormulaEvaluationTemplate(Row, Col: Integer;
const Formula: WideString;
ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
Predloga formulo enkrat prevede pri svojem sidru in razkrije EvaluateAt ter EvaluateAtWithOptions za ponavljajoče se vrednotenje pri različnih ciljnih celicah
Običajne formule A1 in R1C1 neposredno ponovno uporabijo prevedeno drevo; strukturirani sklici A1, katerih pomen je odvisen od vrstice ciljne tabele, pa se razrešijo in prevedejo za ta ciljni kontekst
Predloge ne hranijo pisalnega stanja delovnega lista, varno poročajo xlfeWorksheetUnavailable po uničenju delovnega zvezka in se po potrebi vrnejo k ponovnemu prevajanju z upoštevanjem konteksta, ko spremembe delovnega zvezka naredijo izvorni prevedeni kontekst zastarel
Možnosti za vire, zunanje sklice in povratne klice
| AllowExternalReferences | Privzeto je true, dovoljuje pa samo izrecno registrirane cilje delovnega prostora ali predpomnilnike znotraj datoteke in nikoli ne izvede implicitnega dostopa do datotek ali omrežja |
| AllowUnsafeFormulaCallbacks | Privzeto je false in prepreči, da bi nevarna imena funkcij dosegla register uporabniških funkcij ali povratni klic, preden se oceni kateri koli argument; zavrnitev vrne xlfeUnsafeFunctionDenied |
| CancelFlag | Neobvezni logični kazalec, preverjen pred in po vrednotenju |
| MaxFormulaLength | Privzeto 8192 enot kode UTF-16 |
| MaxEvaluationSteps | Privzeto 1.000.000 vrednotenj sintaksnih elementov |
| MaxRecursionDepth | Privzeto 256 ugnezdenih vrednotenj formul |
| MaxArrayBytes | Privzeto 64 MiB za ustvarjene matrične vsebine |
Ničelna ali negativna največja vrednost onemogoči to omejitev na posamezen klic; politika pomnilnika matrik za celoten delovni zvezek še vedno velja, dosežena omogočena omejitev pa vrne xlfeResourceLimit , ko sprosti začasno stanje vrednotenja
Preobtežitev, ki sprejme eksplicitne možnosti, obravnava AllowUnsafeFormulaCallbacks kot odločilno za ta klic; privzeto enkratno vrednotenje in vrednotenje predlog pa podedujeta lastnost delovnega zvezka z istim imenom
Primer za 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);
Primer za C++Builder
Lxcalc::_di_IXLSFormulaEvaluationTemplate evalTemplate =
sheet->CreateFormulaEvaluationTemplate(1, 1,
WideString(L"=ROW()+COLUMN()"), Lxcalc::xlfrsA1);
Lxcalc::TXLSFormulaEvaluationResult result =
evalTemplate->EvaluateAt(7, 8);Glej tudi