Arkusze klasycznego XLS i XLSX udostępniają to samo API tylko do odczytu do obliczania tekstu formuły tak, jakby została wprowadzona w wybranym wierszu i kolumnie o numeracji od jedynki
Obliczanie jednorazowe
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;
Arkusz dostarcza kontekst nazw lokalnych, odwołań niekwalifikowanych, tabel i łączy zewnętrznych, nie zmieniając aktywnego arkusza, zaznaczenia, modelu komórek, pamięci podręcznej formuł, stanu zmienności ani grafu zależności
xlfrsA1 zachowuje odwołania bezwzględne i mieszane, rozwiązując odwołania względne względem komórki docelowej; xlfrsR1C1 rozwiązuje przesunięcia względne bezpośrednio względem tej celowanej komórki
Wyniki typowane
TXLSFormulaEvaluationResult zwraca Status, oryginalną typowaną wartość Value, IsVolatileoraz stabilny rekord Issue zawierający stan, kod natywny i komunikat
TXLSFormulaEvaluationStatus = (xlfeOk, xlfeInvalidArgument,
xlfeWorksheetUnavailable, xlfeParseError, xlfeUnsupportedFunction,
xlfeCircularReference, xlfeExternalReferenceDenied, xlfeCancelled,
xlfeResourceLimit, xlfeFailed, xlfeUnsafeFunctionDenied);
TXLSFormulaEvaluationIssue = record
Status: TXLSFormulaEvaluationStatus;
NativeCode: Integer;
Message: WideString;
end;
Wartości formuł, takie jak #DIV/0!, #REF!, puste ciągi, tablice, wartości logiczne i daty, pozostają rozróżnialnymi wartościami; błędy analizy, nieobsługiwane funkcje, odwołania cykliczne, odrzucone odwołania zewnętrzne, odrzucone niebezpieczne wywołania zwrotne, anulowanie, nieprawidłowe argumenty, niedostępne arkusze i wyczerpanie zasobów używają jawnych stanów API Issue.NativeCode przenosi podstawowy kod błędu silnika, a Issue.Message the human-readable description when Status is not xlfeOk
Szablony wielokrotnego użytku
function CreateFormulaEvaluationTemplate(Row, Col: Integer;
const Formula: WideString;
ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
Szablon kompiluje formułę jednokrotnie w swoim punkcie zakotwiczenia i udostępnia EvaluateAt oraz EvaluateAtWithOptions do wielokrotnego obliczania w różnych komórkach docelowych
Zwykłe formuły A1 i R1C1 ponownie używają skompilowanego drzewa bezpośrednio; ustrukturyzowane odwołania A1, których znaczenie zależy od wiersza tabeli docelowej, są rozwiązywane i kompilowane dla tego kontekstu docelowego
Szablony nie przechowują zapisywalnego stanu arkusza, bezpiecznie zgłaszają xlfeWorksheetUnavailable po zniszczeniu skoroszytu i wracają do ponownej kompilacji z uwzględnieniem kontekstu, gdy zmiany w skoroszycie uczynią pierwotny skompilowany kontekst nieaktualnym
Opcje zasobów, odwołań zewnętrznych i wywołań zwrotnych
| AllowExternalReferences | Domyślnie true, ale dopuszcza wyłącznie jawnie zarejestrowane cele obszaru roboczego lub pamięci podręczne lokalne dla pliku i nigdy nie wykonuje niejawnych dostępu do plików ani sieci |
| AllowUnsafeFormulaCallbacks | Domyślnie false i blokuje dotarcie niebezpiecznych nazw funkcji do rejestru funkcji użytkownika lub wywołania zwrotnego przed obliczeniem jakiegokolwiek argumentu; odmowa zwraca xlfeUnsafeFunctionDenied |
| CancelFlag | Opcjonalny wskaźnik na Boolean sprawdzany przed i po obliczeniu |
| MaxFormulaLength | Domyślnie 8192 jednostek kodowych UTF-16 |
| MaxEvaluationSteps | Domyślnie 1,000,000 obliczeń elementów składni |
| MaxRecursionDepth | Domyślnie 256 zagnieżdżonych obliczeń formuł |
| MaxArrayBytes | Domyślnie 64 MiB dla generowanych ładunków tablic |
Maksimum zerowe lub ujemne wyłącza dany limit na wywołanie; zasada pamięci tablic dla całego skoroszytu nadal obowiązuje, a osiągnięcie włączonego limitu zwraca xlfeResourceLimit po zwolnieniu tymczasowego stanu obliczania
Przeciążenie przyjmujące jawne opcje traktuje AllowUnsafeFormulaCallbacks jako rozstrzygające dla tego wywołania; domyślne obliczanie jednorazowe i obliczanie szablonu dziedziczą właściwość skoroszytu o tej samej nazwie
Przykład dla 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);
Przykład dla C++Builder
Lxcalc::_di_IXLSFormulaEvaluationTemplate evalTemplate =
sheet->CreateFormulaEvaluationTemplate(1, 1,
WideString(L"=ROW()+COLUMN()"), Lxcalc::xlfrsA1);
Lxcalc::TXLSFormulaEvaluationResult result =
evalTemplate->EvaluateAt(7, 8);Zobacz także