Generování struktury načteného sešitu
Strukturální generace umožňují čtenáři uchovávat nenáročné snímky a odmítnout průchod poté, co se změnila topologie sešitu, na níž je závislý
Zdroje generací
| Engine | Generace úložiště buněk | Generace kolekce listů |
|---|---|---|
| Classic XLS | TXLSWorksheet.CellStructureGeneration | TXLSWorksheets.StructureGeneration |
| XLSX | TXLSXWorksheet.CellStructureGeneration nebo TXLSXCells.StructureGeneration | TXLSXSheets.StructureGeneration |
Každá vlastnost je hodnota UInt64 jen pro čtení a přesná míra její změny není součástí kontraktu
Zneplatňující operace
Vytváření, odstraňování nebo mazání uložených buněk mění generaci úložiště buněk, když se topologie skutečně změní
Vkládání a mazání řádků nebo sloupců, přesun souřadnic, zkomprimované přidávání nebo materializace a explicitní přestavby indexu buněk rovněž zneplatňují stav průchodu úložištěm buněk
Přidávání, mazání, přesouvání či mazání listů mění generaci kolekce listů, když se kolekce skutečně změní
Nezneplatňující operace
Změna hodnoty, vzorce, kešované hodnoty nebo formátu existující buňky nemění generaci jejího úložiště buněk
Přejmenování nebo aktivace listu nemění generaci kolekce listů a operace bez účinku, mazání neexistujících položek nebo vymazání již prázdné kolekce ponechávají aktuální generaci
Validace
Před posunem nebo čtením stavu průchodu vytvořeného pro dřívější generaci zavolejte XlsValidateStructureGeneration
Neshoda vyvolá EXLSLoadedCellCursorInvalidated, což volajícím umožňuje odlišit strukturální zneplatnění od chyb dat nebo formátu
ExpectedGeneration := Worksheet.CellStructureGeneration;
{ Read or retain traversal state }
XlsValidateStructureGeneration(
ExpectedGeneration,
Worksheet.CellStructureGeneration);
Kurzor klasického sešitu
IXLSWorkbook.CreateLoadedCellCursor zachytí agregovanou generaci klasického sešitu a validuje ji před každým voláním MoveNext a Current
Kurzor prochází přímo alokované větve řídkého úložiště s konstantním stavem kurzoru a vrací vlastněné hodnoty TXLSLoadedCellSnapshot
Boolean přetížení zmrazí, zda se zahrnují samostatně formátované uložené prázdné buňky; zděděné formáty řádku, sloupce a listu nevytvářejí prázdné položky kurzoru
Kurzor sešitu XLSX
TXLSXWorkbook.CreateLoadedCellCursor zachytí rezervaci na životnost sešitu a agregovanou topologickou generaci sdílenou úložištěm buněk každého listu a kolekcí listů
Materializovaná cesta čte řídké bloky řádků přímo, zatímco zkomprimovaná cesta znovu používá zkomprimovaný iterátor bez materializace buněk nebo uchovávání interních ukazatelů ve snímcích
Boolean přetížení může v obou reprezentacích úložiště zahrnovat uložené prázdné buňky pouze se stylem, zatímco nestylované zástupce Empty a Null zůstávají vyloučeny
Uvolnění sešitu zneplatní jeho rezervaci dříve, než se úložiště listů uvolní, takže pozdější přístup ke kurzoru vyvolá EXLSLoadedCellCursorInvalidated
Hranice souběžnosti
Kontroly generací poskytují pouze fail-fast detekci a nečiní souběžnou mutaci sešitu a průchod bezpečnými pro vlákna