Метод CreateLoadedCellCursor
Создаёт курсор последовательного перебора сохранённых ячеек в загруженной книге XLSX с возможностью включить пустые ячейки с собственным оформлением
Синтаксис
function CreateLoadedCellCursor: IXLSLoadedCellCursor; overload; function CreateLoadedCellCursor( AIncludeStoredBlanks: Boolean): IXLSLoadedCellCursor; overload;
Порядок и стоимость обхода
Курсор обходит листы в порядке коллекции, затем ячейки по возрастанию строки и столбца
SheetIndex, Row и Col — публичные координаты с нумерацией от единицы
Материализованные листы читаются непосредственно из их выделенных разреженных блоков по 256 строк без построения отсортированного списка ячеек
Упакованные листы читаются непосредственно через итератор упакованного хранилища и остаются упакованными после обхода
Состояние курсора постоянно относительно размера книги и не выделяет массивы, размер которых равен пределам строк или столбцов XLSX
Перегрузка без параметров пропускает пустые ячейки, отличающиеся только стилем, сохранённые заполнители Empty и сохранённые заполнители Null
Передайте True, чтобы включить координаты пустых ячеек с независимым оформлением из материализованного или упакованного хранилища без материализации упакованных ячеек
Неоформленные заполнители Empty и Null остаются исключёнными в обоих режимах
Поля снимка
| Поле | Значение |
|---|---|
SheetIndex / SheetName | Идентичность владеющего листа на момент захвата |
Row / Col | Координаты ячейки с нумерацией от единицы |
StyleIndex | Индекс формата ячейки XLSX, захваченный из материализованного или упакованного хранилища |
Kind | xlckText, xlckNumber, xlckDateTime, xlckBoolean, xlckFormula, xlckError или xlckBlank |
Value | Собственное значение Variant, захваченное для текущей ячейки |
Formula | Текст формулы для ячеек с формулами, иначе пустая строка |
Строки и значения Variant в TXLSLoadedCellSnapshot принадлежат снимку и не раскрывают внутренние указатели ячеек или упакованного хранилища
Для ячеек с формулами XLSX Value — текущее сохранённое кэшированное значение, и обход не пересчитывает формулу
Для xlckBlank Value равен Unassigned, Formula пуст, а StyleIndex идентифицирует сохранённый формат ячейки
Состояние, инвалидация и время жизни
State равен xlccBeforeFirst до первого успешного MoveNext, xlccActive, пока доступен Current, и xlccEof после завершения обхода
Чтение Current до первой ячейки или после EOF вызывает EXLSLoadedCellCursorState
Создание или удаление сохранённых ячеек, материализация упакованного хранилища, явная перестройка индексов либо добавление, удаление, перемещение или очистка листов делают курсор недействительным
Следующий вызов MoveNext или Current вызывает EXLSLoadedCellCursorInvalidated
Изменение значения, формулы или формата существующей ячейки не делает курсор недействительным, и уже захваченный снимок остаётся неизменным
Освобождение книги до курсора также вызывает EXLSLoadedCellCursorInvalidated вместо того, чтобы оставлять курсор с висячим указателем на книгу
Проверка поколения — это обнаружение с немедленным отказом и не делает параллельное изменение и обход потокобезопасными
Пример
Cursor := Workbook.CreateLoadedCellCursor;
while Cursor.MoveNext do
begin
Cell := Cursor.Current;
Memo1.Lines.Add(Format('%s!R%dC%d = %s',
[Cell.SheetName, Cell.Row, Cell.Col, VarToStr(Cell.Value)]));
end;