HotXLS dokumentáció

Kontextusfüggő képletkiértékelés

A Classic XLS és XLSX munkalapok ugyanazt a csak olvasható API-t fedik fel a képlet szövegének kiértékelésére, mintha az egy kiválasztott, 1-alapú sorban és oszlopban lett volna megadva

Egyszeri kiértékelés

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;
A munkalap szolgáltatja a helyi nevek, a minősítetlen hivatkozások, a táblák és a külső hivatkozások kontextusát az aktív munkalap, a kijelölés, a cellamodell, a képletgyorsítótár, a módosultsági állapot vagy a függőséggráf megváltoztatása nélkül
Az xlfrsA1 megőrzi az abszolút és vegyes hivatkozásokat, miközben a relatív hivatkozásokat a célcellától oldja fel; az xlfrsR1C1 a relatív eltolásokat közvetlenül ettől a céltól oldja fel

Típusos eredmények

A TXLSFormulaEvaluationResult visszaadja a Status-t, az eredeti típusos Value-t, az IsVolatile-t és egy stabil Issue rekordot, amely állapotot, natív kódot és üzenetet tartalmaz
TXLSFormulaEvaluationStatus = (xlfeOk, xlfeInvalidArgument,
  xlfeWorksheetUnavailable, xlfeParseError, xlfeUnsupportedFunction,
  xlfeCircularReference, xlfeExternalReferenceDenied, xlfeCancelled,
  xlfeResourceLimit, xlfeFailed, xlfeUnsafeFunctionDenied);

TXLSFormulaEvaluationIssue = record
  Status: TXLSFormulaEvaluationStatus;
  NativeCode: Integer;
  Message: WideString;
end;
    
A képletértékek, például a #DIV/0!, #REF!, üres karakterláncok, tömbök, logikai értékek és dátumok megkülönböztethető értékek maradnak; az elemzési hibák, a nem támogatott függvények, a körkörös hivatkozások, az elutasított külső hivatkozások, az elutasított nem biztonságos visszahívások, a megszakítás, az érvénytelen argumentumok, a nem elérhető munkalapok és az erőforrás-kimerülés explicit API-állapotokat használnak. Az Issue.NativeCode a mögöttes motor hibakódját hordozza, az Issue.Message pedig az ember által olvasható leírást adja, ha a Status nem xlfeOk

Újrahasznosítható, nem módosítható sablonok

function CreateFormulaEvaluationTemplate(Row, Col: Integer;
  const Formula: WideString;
  ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
A sablon egyszer lefordítja a képletet a horgonyánál, és felfedi az EvaluateAt és EvaluateAtWithOptions metódusokat a különböző célcellákon történő ismételt kiértékeléshez
A szokásos A1 és R1C1 képletek közvetlenül újrahasznosítják a lefordított fát; azok az A1 strukturált hivatkozások, amelyek jelentése a cél tábla sorától függ, az adott célkontextusra oldódnak fel és fordítódnak le
A sablonok nem tartanak fenn írható munkalapállapotot, a munkafüzet megsemmisítése után biztonságosan jelezik az xlfeWorksheetUnavailable állapotot, és kontextustudatos újrafordításra térnek vissza, amikor a munkafüzet változásai elavulttá teszik az eredeti lefordított kontextust

Erőforrás-, külső hivatkozás- és visszahívási beállítások

AllowExternalReferencesAlapértelmezése true, de csak explicit módon regisztrált munkaterület-célokat vagy fájlhelyi gyorsítótárakat engedélyez, és soha nem végez implicit fájl- vagy hálózati hozzáférést
AllowUnsafeFormulaCallbacksAlapértelmezése false, és blokkolja a veszélyes függvényneveket, hogy azok bármely argumentum kiértékelése előtt eljussanak a felhasználói függvény-regisztrációhoz vagy visszahíváshoz; az elutasítás xlfeUnsafeFunctionDenied állapotot ad
CancelFlagOpcionális logikai pointer, amelyet a kiértékelés előtt és után ellenőriznek
MaxFormulaLengthAlapértelmezése 8192 UTF-16 kódegység
MaxEvaluationStepsAlapértelmezése 1,000,000 szintaktikai elem kiértékelése
MaxRecursionDepthAlapértelmezése 256 egymásba ágyazott képletkiértékelés
MaxArrayBytesAlapértelmezése 64 MiB a generált tömb-adatterhelésekhez
A nulla vagy negatív maximum letiltja azt a hívásonkénti korlátot; a munkafüzet-szintű tömbmemória-szabályzat továbbra is érvényes, és egy engedélyezett korlát elérése xlfeResourceLimit állapotot ad az ideiglenes kiértékelési állapot felszabadítása után
Az explicit beállításokat elfogadó túlterhelés az adott hívásra nézve mérvadónak tekinti az AllowUnsafeFormulaCallbacks-t; az alapértelmezett egyszeri és sablonon alapuló kiértékelés a munkafüzet azonos nevű tulajdonságát örökli

Delphi-példa

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-példa

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

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

Lásd még

TXLSWorksheet.Calculate metódus
IXLSWorkbook.Calculate metódus
Excel számítási motor