Генерация на структурата на заредената работна книга
Структурните генерации позволяват на четещия код да задържа евтини моментни снимки и да отхвърля обхождане, след като топологията на работната книга, от която то зависи, е променена
Източници на генерации
| Машина | Генерация на клетъчното хранилище | Генерация на колекцията листове |
|---|---|---|
| Classic XLS | TXLSWorksheet.CellStructureGeneration | TXLSWorksheets.StructureGeneration |
| XLSX | TXLSXWorksheet.CellStructureGeneration или TXLSXCells.StructureGeneration | TXLSXSheets.StructureGeneration |
Всяко свойство е стойност UInt64 само за четене, а точната сума, с която се променя, не е договорна
Операции, които инвалидират
Създаването, премахването или изчистването на съхранени клетки променя генерацията на клетъчното хранилище, когато топологията наистина се промени
Вмъкването и изтриването на редове или колони, преместването по координати, пакетното добавяне или материализацията и изричните престроявания на клетъчния индекс също инвалидират състоянието на обхождането на клетъчното хранилище
Добавянето, изтриването, местенето или изчистването на листове променя генерацията на колекцията листове, когато колекцията наистина се промени
Операции, които не инвалидират
Промяната на стойност, формула, кеширана стойност или формат на съществуваща клетка не променя генерацията на нейното клетъчно хранилище
Преименуването или активирането на лист не променя генерацията на колекцията листове, а празните операции по местене, липсващите изтривания или изчистването на вече празна колекция запазват текущата генерация
Валидация
Извикайте XlsValidateStructureGeneration, преди да напреднете или прочетете състояние на обхождане, създадено за по-ранна генерация
Несъответствие повдига EXLSLoadedCellCursorInvalidated, позволявайки на извикващия да разграничи структурна инвалидация от грешки в данните или форматирането
ExpectedGeneration := Worksheet.CellStructureGeneration;
{ Read or retain traversal state }
XlsValidateStructureGeneration(
ExpectedGeneration,
Worksheet.CellStructureGeneration);
Курсор на класическата работна книга
IXLSWorkbook.CreateLoadedCellCursor улавя сборната генерация на класическата работна книга и я валидира преди всяко извикване на MoveNext и Current
Курсорът обхожда директно разпределените клонове на разреденото съхранение с постоянно състояние на курсора и връща притежавани стойности TXLSLoadedCellSnapshot
Булевото претоварване фиксира дали независимо стилизираните съхранени празни клетки се включват; наследените формати на ред, колона и лист не създават празни записи в курсора
Курсор на XLSX работната книга
TXLSXWorkbook.CreateLoadedCellCursor улавя лизинг за жизнения цикъл на работната книга и сборна генерация на топологията, споделена от всяко клетъчно хранилище на листовете и колекцията листове
Материализираният път чете директно разредените блокове с редове, а пакетираният път преизползва пакетирания итератор, без да материализира клетки или да задържа вътрешни указатели в моментните снимки
Булевото претоварване може да включи стилови съхранени празни клетки в двете представления на съхранението, докато нестилираните запазени места Empty и Null остават изключени
Освобождаването на работната книга инвалидира нейния лизинг, преди съхранението на листовете да бъде освободено, така че по-късен достъп до курсора повдига EXLSLoadedCellCursorInvalidated
Граница на конкурентността
Проверките на генерациите осигуряват само откриване с незабавен отказ и не правят едновременната мутация и обхождане на работната книга безопасни за нишки