HotXLS-Dokumentation

Kontextbezogene Formelauswertung

Classic-XLS- und XLSX-Arbeitsblätter legen dieselbe schreibgeschützte API offen, um Formeltext auszuwerten, als wäre er in einer gewählten einsbasierten Zeile und Spalte eingetragen worden

Einmalige Auswertung

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;
Das Arbeitsblatt stellt den Kontext für lokale Namen, nicht qualifizierte Bezüge, Tabellen und externe Links bereit, ohne das aktive Blatt, die Auswahl, das Zellmodell, den Formelcache, den Dirty-Zustand oder den Abhängigkeitsgraphen zu verändern
xlfrsA1 bewahrt absolute und gemischte Bezüge und löst relative Bezüge von der Zielzelle auf; xlfrsR1C1 löst relative Offsets direkt von dieser Zielzelle aus auf
CELL ohne explizite Referenz untersucht die gelieferte Zielzelle; mit $A$1 wird die feste erste Zelle von jedem Ziel aus untersucht, während A1 sich relativ zu diesem Ziel gemäß dem A1-Kontextvertrag auflöst
Modellgestützte CELL-Metadaten und INFO("recalc") funktionieren auch über schreibgeschützte Arbeitsmappenansichten, ohne deren Generation oder gespeicherte Formel-Caches zu ändern; CELL("width",reference) behält sein Ein-Zeile-/Zwei-Spalten-Array, und nicht klassifizierte benutzerdefinierte Formate liefern xlfeUnsupportedFunction statt eines erfundenen Formatcodes; siehe CELL- und INFO-Metadaten für die vollständigen Headless- und Locale-Grenzen

Typisierte Ergebnisse

FORMULATEXT untersucht gespeicherte Formel-Metadaten über beide Worksheet-Engines und schreibgeschützte Ansichten hinweg, ohne das untersuchte Ziel zu berechnen; GETPIVOTDATA wertet einen entkoppelten Snapshot des vorhandenen Caches einer lokalen PivotTable aus und beachtet Auswertungsbudgets und Abbruch; fehlende sichtbare Aggregate bleiben typisierte #REF!-Werte, während unvollständige oder nicht unterstützte Pivot-Modelle xlfeUnsupportedFunction liefern; siehe Formeltext-Inspektion und sichtbare Pivot-Daten für Speicher-, Array- und Cache-Grenzen
TXLSFormulaEvaluationResult gibt Status, den ursprünglichen typisierten Value, IsVolatileund einen stabilen Issue -Datensatz mit Status, nativem Code und Meldung zurück
TXLSFormulaEvaluationStatus = (xlfeOk, xlfeInvalidArgument,
  xlfeWorksheetUnavailable, xlfeParseError, xlfeUnsupportedFunction,
  xlfeCircularReference, xlfeExternalReferenceDenied, xlfeCancelled,
  xlfeResourceLimit, xlfeFailed, xlfeUnsafeFunctionDenied);

TXLSFormulaEvaluationIssue = record
  Status: TXLSFormulaEvaluationStatus;
  NativeCode: Integer;
  Message: WideString;
end;
    
Formelwerte wie #DIV/0!, #REF!, leere Zeichenfolgen, Arrays, boolesche Werte und Datumsangaben bleiben unterscheidbare Werte; Parserfehler, nicht unterstützte Funktionen, zirkuläre Bezüge, abgelehnte externe Bezüge, abgelehnte unsichere Rückrufe, Abbruch, ungültige Argumente, nicht verfügbare Arbeitsblätter und Erschöpfung der Ressourcen verwenden explizite API-Statuswerte Issue.NativeCode trägt den zugrunde liegenden Fehlercode der Engine und Issue.Message the human-readable description when Status is not xlfeOk

Wiederverwendbare unveränderliche Vorlagen

function CreateFormulaEvaluationTemplate(Row, Col: Integer;
  const Formula: WideString;
  ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
Eine Vorlage kompiliert die Formel einmal an ihrem Anker und legt EvaluateAt und EvaluateAtWithOptions für wiederholte Auswertung an anderen Zielzellen offen
Gewöhnliche A1- und R1C1-Formeln verwenden den kompilierten Baum direkt; A1-Strukturbezüge, deren Bedeutung von der Zieltabellenzeile abhängt, werden für diesen Zielkontext aufgelöst und kompiliert
Vorlagen halten keinen schreibbaren Arbeitsblattzustand, melden nach der Zerstörung der Arbeitsmappe sicher xlfeWorksheetUnavailable und fallen zurück auf eine kontextsensitive Neukompilierung, wenn Arbeitsmappenänderungen den ursprünglichen kompilierten Kontext veraltet machen

Optionen für Ressourcen, externe Bezüge und Rückrufe

AllowExternalReferencesIst standardmäßig true, erlaubt aber nur ausdrücklich registrierte Arbeitsbereichsziele oder dateilokale Caches und führt niemals impliziten Datei- oder Netzwerkzugriff durch
AllowUnsafeFormulaCallbacksIst standardmäßig false und blockiert gefährliche Funktionsnamen, bevor ein Argument ausgewertet wird, damit sie keine Benutzerfunktionsregistrierung oder einen Rückruf erreichen; die Ablehnung gibt xlfeUnsafeFunctionDenied
CancelFlagOptionaler boolescher Zeiger, der vor und nach der Auswertung geprüft wird
MaxFormulaLengthStandardmäßig 8192 UTF-16-Codeeinheiten
MaxEvaluationStepsStandardmäßig 1.000.000 Auswertungen von Syntaxelementen
MaxRecursionDepthStandardmäßig 256 verschachtelte Formelauswertungen
MaxArrayBytesStandardmäßig 64 MiB für erzeugte Array-Payloads
Ein Maximalwert von null oder darunter deaktiviert das jeweilige Limit pro Aufruf; die arbeitsmappenweite Array-Speicherrichtlinie gilt weiterhin, und das Erreichen eines aktivierten Limits gibt xlfeResourceLimit zurück, nachdem der temporäre Auswertungszustand freigegeben wurde
Die Überladung mit expliziten Optionen behandelt AllowUnsafeFormulaCallbacks für diesen Aufruf als maßgeblich; die Standard-Einmalauswertung und die Vorlagenauswertung erben die Arbeitsmappeneigenschaft desselben Namens

Delphi-Beispiel

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-Beispiel

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

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

Die direkte Regular-Expression-Backend-API dokumentiert Matching und Ersetzung pro Instanz, Statuswerte und Aufrufer-Budgets

REGEX-Formeln teilen sich die Work-, Speicher- und Abbruchsteuerung des aktuellen Auswertungskontexts, einschließlich PCRE2-Workspace- und Ausgabeallokationen; Abbruch oder ein Ressourcenlimit liefert einen expliziten Status ohne partielles Extraktions- oder Ersetzungsergebnis

GROUPBY und PIVOTBY fassen entkoppelte Arrays oder Arbeitsblattbereichs-Snapshots im aktuellen Kontext zusammen, einschließlich erfasster Lambda-Umgebungen, Gruppierungsindizes, Callback-Vektoren und Ausgabespeicher; Ressourcenlimits und Abbruch liefern explizite Status, ohne Arbeitsblattdaten, Caches oder Layout zu ändern

Siehe auch

TXLSWorksheet.Calculate-Methode
IXLSWorkbook.Calculate-Methode
Excel-Berechnungs-Engine