Dokumentacija HotXLS

Kontekstualno izračunavanje formula

Klasični XLS i XLSX radni listovi izlažu isti API samo za čitanje za izračunavanje teksta formule kao da je unesen u odabrani redak i stupac koji broje od jedan

Jednokratno izračunavanje

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;
Radni list opskrbljuje kontekst lokalnih imena, nekvalificiranih referenci, tablica i vanjskih veza bez mijenjanja aktivnog lista, odabira, modela ćelija, predmemorije formula, stanja neažurnosti ili grafa ovisnosti
xlfrsA1 zadržava apsolutne i mješovite reference, a relativne reference razrješava u odnosu na ciljnu ćeliju; xlfrsR1C1 relativne pomake razrješava izravno iz tog cilja

Tipizirani rezultati

TXLSFormulaEvaluationResult vraća Status, izvornu tipiziranu Value, IsVolatile i stabilan zapis Issue koji sadrži status, izvorni kôd i poruku
TXLSFormulaEvaluationStatus = (xlfeOk, xlfeInvalidArgument,
  xlfeWorksheetUnavailable, xlfeParseError, xlfeUnsupportedFunction,
  xlfeCircularReference, xlfeExternalReferenceDenied, xlfeCancelled,
  xlfeResourceLimit, xlfeFailed, xlfeUnsafeFunctionDenied);

TXLSFormulaEvaluationIssue = record
  Status: TXLSFormulaEvaluationStatus;
  NativeCode: Integer;
  Message: WideString;
end;
    
Vrijednosti formula poput #DIV/0!, #REF!, praznih znakovnih nizova, polja, Booleovih vrijednosti i datuma ostaju razlikovive vrijednosti; neuspjela raščlamba, nepodržane funkcije, kružne reference, odbijene vanjske reference, odbijeni nesigurni povratni pozivi, otkazivanje, nevažeći argumenti, nedostupni radni listovi i iscrpljenost resursa upotrebljavaju izričite statusne kôdove API-ja

Ponovno upotrebljivi nepromjenjivi predlošci

function CreateFormulaEvaluationTemplate(Row, Col: Integer;
  const Formula: WideString;
  ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
Predložak formulu jednom kompilira na svojoj sidrenoj točki i izlaže EvaluateAt i EvaluateAtWithOptions za ponovljeno izračunavanje na različitim ciljnim ćelijama
Obične A1 i R1C1 formule izravno ponovno upotrebljavaju kompilirano stablo; A1 strukturirane reference čije značenje ovisi o retku ciljne tablice razrješavaju se i kompiliraju za taj ciljni kontekst
Predlošci ne drže stanje radnog lista u koje se može pisati, sigurno izvještavaju xlfeWorksheetUnavailable nakon uništenja radne knjige i vraćaju se na ponovnu kompilaciju svjesnu konteksta kada promjene radne knjige učine izvorni kompilirani kontekst zastarjelim

Opcije resursa, vanjskih referenci i povratnih poziva

AllowExternalReferencesStandardno je true, no dopušta samo izričito registrirane radne ciljeve ili predmemorije unutar datoteke i nikada ne izvodi neizravan pristup datoteci ni mreži
AllowUnsafeFormulaCallbacksStandardno je false i blokira opasne nazive funkcija da dosegnu registar korisničkih funkcija ili povratni poziv prije nego se procijeni ijedan argument; odbijanje vraća xlfeUnsafeFunctionDenied
CancelFlagNeobavezan Booleov pokazivač provjeravan prije i nakon izračunavanja
MaxFormulaLengthStandardno 8192 kodnih jedinica UTF-16
MaxEvaluationStepsStandardno 1,000,000 izračunavanja sintaksnih stavki
MaxRecursionDepthStandardno 256 ugniježđenih izračunavanja formula
MaxArrayBytesStandardno 64 MiB za generirane korisne sadržaje polja
Nulta ili negativna najveća vrijednost onemogućuje to ograničenje po pozivu; pravilnik o memoriji polja na razini radne knjige i dalje se primjenjuje, a dosegnuto omogućeno ograničenje vraća xlfeResourceLimit nakon otpuštanja privremenog stanja izračunavanja
Preopterećenje koje prima izričite opcije tretira AllowUnsafeFormulaCallbacks kao mjerodavno za taj poziv; standardno jednokratno izračunavanje i izračunavanje kroz predloške nasljeđuje istoimeno svojstvo radne knjige

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

Primjer za C++Builder

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

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

Vidi također

TXLSWorksheet.Calculate metoda
IXLSWorkbook.Calculate metoda
Pogon za izračune programa Excel