Dokumentacja HotXLS

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

SilnikGeneracja magazynu komórekGeneracja kolekcji arkuszy
Klasyczny XLSTXLSWorksheet.CellStructureGenerationTXLSWorksheets.StructureGeneration
XLSXTXLSXWorksheet.CellStructureGeneration lub TXLSXCells.StructureGenerationTXLSXSheets.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

Zobacz także