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
| AllowExternalReferences | Alapé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 |
| AllowUnsafeFormulaCallbacks | Alapé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 |
| CancelFlag | Opcionális logikai pointer, amelyet a kiértékelés előtt és után ellenőriznek |
| MaxFormulaLength | Alapértelmezése 8192 UTF-16 kódegység |
| MaxEvaluationSteps | Alapértelmezése 1,000,000 szintaktikai elem kiértékelése |
| MaxRecursionDepth | Alapértelmezése 256 egymásba ágyazott képletkiértékelés |
| MaxArrayBytes | Alapé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