Generacja struktury załadowanego skoroszytu
Generacje strukturalne pozwalają czytnikowi utrzymywać niedrogie migawki i odrzucać przechodzenie po tym, jak zmieniła się topologia skoroszytu, od której zależy
Źródła generacji
| Silnik | Generacja magazynu komórek | Generacja kolekcji arkuszy |
|---|---|---|
| Klasyczny XLS | TXLSWorksheet.CellStructureGeneration | TXLSWorksheets.StructureGeneration |
| XLSX | TXLSXWorksheet.CellStructureGeneration lub TXLSXCells.StructureGeneration | TXLSXSheets.StructureGeneration |
Każda właściwość to wartość UInt64 dostępna tylko do odczytu, a dokładna wielkość jej zmiany nie jest objęta kontraktem
Operacje unieważniające
Tworzenie, usuwanie lub czyszczenie zapisanych komórek zmienia generację magazynu komórek, gdy topologia rzeczywiście się zmienia
Wstawianie i usuwanie wierszy lub kolumn, przenoszenie współrzędnych, spakowane dołączanie czy materializacja, a także jawna przebudowa indeksu komórek również unieważniają stan przechodzenia magazynu komórek
Dodawanie, usuwanie, przenoszenie lub czyszczenie arkuszy zmienia generację kolekcji arkuszy, gdy kolekcja rzeczywiście się zmienia
Operacje nieunieważniające
Zmiana wartości, formuły, wartości z pamięci podręcznej lub formatu istniejącej komórki nie zmienia jej generacji magazynu komórek
Zmiana nazwy lub aktywacja arkusza nie zmienia generacji kolekcji arkuszy, a ruchy bez efektu, nieobecne usunięcia lub czyszczenie już pustej kolekcji zachowują bieżącą generację
Walidacja
Wywołaj XlsValidateStructureGeneration przed przesuwaniem lub odczytywaniem stanu przechodzenia utworzonego dla wcześniejszej generacji
Niezgodność zgłasza EXLSLoadedCellCursorInvalidated, pozwalając wywołującemu odróżnić unieważnienie strukturalne od błędów danych lub formatu
ExpectedGeneration := Worksheet.CellStructureGeneration;
{ Read or retain traversal state }
XlsValidateStructureGeneration(
ExpectedGeneration,
Worksheet.CellStructureGeneration);
Kursor skoroszytu klasycznego
IXLSWorkbook.CreateLoadedCellCursor przechwytuje zagregowaną generację skoroszytu klasycznego i waliduje ją przed każdym wywołaniem MoveNext i Current
Kursor przechodzi bezpośrednio przez przydzielone gałęzie rozrzedzonego magazynu ze stałym stanem kursora i zwraca wartości TXLSLoadedCellSnapshot będące własnością migawki
Przeciążenie logiczne zamraża, czy zapisane puste komórki o niezależnym formatowaniu są uwzględniane; odziedziczone formaty wiersza, kolumny i arkusza nie tworzą pustych wpisów kursora
Kursor skoroszytu XLSX
TXLSXWorkbook.CreateLoadedCellCursor przechwytuje dzierżawę na czas życia skoroszytu i zagregowaną generację topologii współdzieloną przez magazyn komórek każdego arkusza oraz kolekcję arkuszy
Ścieżka zmaterializowana czyta rozrzedzone bloki wierszy bezpośrednio, natomiast ścieżka spakowana ponownie używa iteratora spakowanego bez materializowania komórek i bez utrzymywania wewnętrznych wskaźników w migawkach
Przeciążenie logiczne może uwzględniać zapisane puste komórki różniące się tylko stylem w obu reprezentacjach magazynu, podczas gdy niesformatowane zastępniki Empty i Null pozostają wyłączone
Zwolnienie skoroszytu unieważnia jego dzierżawę przed zwolnieniem magazynu arkuszy, więc późniejszy dostęp do kursora zgłasza EXLSLoadedCellCursorInvalidated
Granica współbieżności
Sprawdzenia generacji zapewniają wyłącznie wykrywanie z natychmiastową odmową i nie czynią równoległej modyfikacji skoroszytu oraz przechodzenia bezpiecznymi wątkowo