HotXLS-Dokumentation

CreateLoadedCellCursor-Methode

Erstellt einen Pull-Cursor über die gespeicherten Zellen einer geladenen XLSX-Arbeitsmappe, mit der Option, unabhängig formatierte Leerzellen einzuschließen

Syntax

function CreateLoadedCellCursor: IXLSLoadedCellCursor; overload;
function CreateLoadedCellCursor(
  AIncludeStoredBlanks: Boolean): IXLSLoadedCellCursor; overload;

Durchlaufreihenfolge und Kosten

Der Cursor besucht die Arbeitsblätter in Auflistungsreihenfolge und danach die Zellen nach aufsteigender Zeile und Spalte

SheetIndex, Row und Col sind öffentliche, einsbasierte Koordinaten

Materialisierte Arbeitsblätter werden direkt aus ihren zugewiesenen dünn besetzten 256-Zeilen-Blöcken gelesen, ohne eine sortierte Zellliste aufzubauen

Gepackte Arbeitsblätter werden direkt über den Iterator der gepackten Speicherung gelesen und bleiben nach dem Durchlauf gepackt

Der Cursorzustand ist konstant bezüglich der Arbeitsmappengröße und reserviert keine Arrays in Größe der XLSX-Zeilen- oder Spaltengrenzen

Die parameterlose Überladung überspringt reine Stil-Leerzellen, gespeicherte Empty-Platzhalter und gespeicherte Null-Platzhalter

Übergeben Sie True, um unabhängig formatierte Leerzellen-Koordinaten aus materialisierter oder gepackter Speicherung einzuschließen, ohne gepackte Zellen zu materialisieren

Unformatierte Empty- und Null-Platzhalter bleiben in beiden Modi ausgeschlossen

Momentaufnahmefelder

FeldBedeutung
SheetIndex / SheetNameIdentität des besitzenden Arbeitsblatts zum Zeitpunkt der Erfassung
Row / ColEinsbasierte Zellkoordinaten
StyleIndexAus materialisierter oder gepackter Speicherung erfasster XLSX-Zellformatindex
KindxlckText, xlckNumber, xlckDateTime, xlckBoolean, xlckFormula, xlckError oder xlckBlank
ValueEigener Variant-Wert, der für die aktuelle Zelle erfasst wurde
FormulaFormeltext für Formelzellen, andernfalls eine leere Zeichenfolge

Zeichenfolgen und Variants in TXLSLoadedCellSnapshot sind eigene Werte und geben keine internen Zell- oder gepackte Speicherzeiger frei

Bei XLSX-Formelzellen ist Value der derzeit gespeicherte Zwischenspeicherwert, und der Durchlauf berechnet die Formel nicht neu

Für xlckBlank ist Value Unassigned, Formula ist leer, und StyleIndex identifiziert das gespeicherte Zellformat

Zustand, Ungültigkeit und Lebensdauer

State ist xlccBeforeFirst, bis das erste MoveNext erfolgreich ist, xlccActive, solange Current verfügbar ist, und xlccEof, nachdem der Durchlauf abgeschlossen ist

Das Lesen von Current vor der ersten Zelle oder nach EOF löst EXLSLoadedCellCursorState aus

Das Erstellen oder Löschen gespeicherter Zellen, die Materialisierung der gepackten Speicherung, explizite Indexneuaufbauten oder das Hinzufügen, Löschen, Verschieben oder Leeren von Arbeitsblättern macht den Cursor ungültig

Der nächste MoveNext- oder Current-Aufruf löst dann EXLSLoadedCellCursorInvalidated aus

Das Ändern des Werts, der Formel oder des Formats einer bestehenden Zelle macht den Cursor nicht ungültig, und eine bereits erfasste Momentaufnahme bleibt unverändert

Die Freigabe der Arbeitsmappe vor dem Cursor löst ebenfalls EXLSLoadedCellCursorInvalidated aus, statt den Cursor mit einem hängenden Arbeitsmappenzeiger zurückzulassen

Die Generationsvalidierung ist eine Fail-Fast-Erkennung und macht gleichzeitige Änderung und Durchlauf nicht threadsicher

Beispiel

Cursor := Workbook.CreateLoadedCellCursor;
while Cursor.MoveNext do
begin
  Cell := Cursor.Current;
  Memo1.Lines.Add(Format('%s!R%dC%d = %s',
    [Cell.SheetName, Cell.Row, Cell.Col, VarToStr(Cell.Value)]));
end;

Siehe auch