Strukturgeneration geladener Arbeitsmappen
Strukturgenerationen lassen einen Leser kostengünstige Momentaufnahmen behalten und Durchläufe verwerfen, nachdem sich die Arbeitsmappentopologie, von der er abhängt, geändert hat
Generationsquellen
| Engine | Generation des Zellspeichers | Generation der Arbeitsblattauflistung |
|---|---|---|
| Classic XLS | TXLSWorksheet.CellStructureGeneration | TXLSWorksheets.StructureGeneration |
| XLSX | TXLSXWorksheet.CellStructureGeneration oder TXLSXCells.StructureGeneration | TXLSXSheets.StructureGeneration |
Jede Eigenschaft ist ein schreibgeschützter UInt64-Wert, und der genaue Betrag, um den sie sich ändert, ist nicht vertraglich zugesichert
Ungültig machende Operationen
Das Erstellen, Entfernen oder Leeren gespeicherter Zellen ändert die Generation des Zellspeichers, wenn sich die Topologie tatsächlich ändert
Einfügen oder Löschen von Zeilen oder Spalten, Koordinatenverschiebungen, gepacktes Anhängen oder Materialisierung und explizite Neuaufbauten des Zellindex machen ebenfalls den Durchlaufzustand des Zellspeichers ungültig
Das Hinzufügen, Löschen, Verschieben oder Leeren von Arbeitsblättern ändert die Generation der Arbeitsblattauflistung, wenn sich die Auflistung tatsächlich ändert
Nicht ungültig machende Operationen
Das Ändern des Werts, der Formel, des zwischengespeicherten Werts oder des Formats einer bestehenden Zelle ändert ihre Zellspeicher-Generation nicht
Das Umbenennen oder Aktivieren eines Arbeitsblatts ändert die Generation der Arbeitsblattauflistung nicht, und No-Op-Verschiebungen, fehlende Löschungen oder das Leeren einer bereits leeren Auflistung behalten die aktuelle Generation
Validierung
Rufen Sie XlsValidateStructureGeneration auf, bevor Sie Durchlaufzustand voranstellen oder lesen, der für eine frühere Generation erstellt wurde
Eine Abweichung löst EXLSLoadedCellCursorInvalidated aus, sodass Aufrufer strukturelle Ungültigkeit von Daten- oder Formatfehlern unterscheiden können
ExpectedGeneration := Worksheet.CellStructureGeneration;
{ Read or retain traversal state }
XlsValidateStructureGeneration(
ExpectedGeneration,
Worksheet.CellStructureGeneration);
Cursor der Classic-Arbeitsmappe
IXLSWorkbook.CreateLoadedCellCursor erfasst die aggregierte Generation der Classic-Arbeitsmappe und validiert sie vor jedem MoveNext- und Current-Aufruf
Der Cursor durchläuft die zugewiesenen Verzweigungen des Sparspeichers direkt mit konstantem Cursorzustand und gibt eigene TXLSLoadedCellSnapshot-Werte zurück
Die boolesche Überladung friert ein, ob unabhängig formatierte gespeicherte Leerzellen eingeschlossen werden; geerbte Zeilen-, Spalten- und Arbeitsblattformate erzeugen keine Leerzellen-Einträge im Cursor
Cursor der XLSX-Arbeitsmappe
TXLSXWorkbook.CreateLoadedCellCursor erfasst eine Lease über die Arbeitsmappen-Lebensdauer und eine aggregierte Topologiegeneration, die von jedem Arbeitsblatt-Zellspeicher und der Arbeitsblattauflistung gemeinsam genutzt wird
Der materialisierte Pfad liest Sparse-Zeilenblöcke direkt, während der gepackte Pfad den gepackten Iterator wiederverwendet, ohne Zellen zu materialisieren oder interne Zeiger in Momentaufnahmen zu behalten
Die boolesche Überladung kann in beiden Speicherrepräsentationen nur auf Stil beruhende gespeicherte Leerzellen einschließen, während unformatierte Empty- und Null-Platzhalter ausgeschlossen bleiben
Die Freigabe der Arbeitsmappe macht ihre Lease ungültig, bevor der Arbeitsblattspeicher freigegeben wird, sodass späterer Cursorzugriff EXLSLoadedCellCursorInvalidated auslöst
Nebenläufigkeitsgrenze
Generationsprüfungen bieten nur eine Fail-Fast-Erkennung und machen gleichzeitige Arbeitsmappenänderung und Durchlauf nicht threadsicher