Dokumentacja HotXLS

Kontekstowe obliczanie formuł

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

AllowExternalReferencesDomyś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
AllowUnsafeFormulaCallbacksDomyślnie false i blokuje dotarcie niebezpiecznych nazw funkcji do rejestru funkcji użytkownika lub wywołania zwrotnego przed obliczeniem jakiegokolwiek argumentu; odmowa zwraca xlfeUnsafeFunctionDenied
CancelFlagOpcjonalny wskaźnik na Boolean sprawdzany przed i po obliczeniu
MaxFormulaLengthDomyślnie 8192 jednostek kodowych UTF-16
MaxEvaluationStepsDomyślnie 1,000,000 obliczeń elementów składni
MaxRecursionDepthDomyślnie 256 zagnieżdżonych obliczeń formuł
MaxArrayBytesDomyś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

Metoda TXLSWorksheet.Calculate
Metoda IXLSWorkbook.Calculate
Silnik obliczeniowy Excel