Документация HotXLS

Поколение структуры загруженной книги

Структурные поколения позволяют читателю удерживать недорогие снимки и отклонять обход после того, как изменилась топология книги, от которой он зависит

Источники поколений

ДвижокПоколение хранилища ячеекПоколение коллекции листов
Классический XLSTXLSWorksheet.CellStructureGenerationTXLSWorksheets.StructureGeneration
XLSXTXLSXWorksheet.CellStructureGeneration или TXLSXCells.StructureGenerationTXLSXSheets.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

Граница конкурентности

Проверки поколения обеспечивают только обнаружение с немедленным отказом и не делают параллельное изменение книги и обход потокобезопасными

См. также