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

Метод 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, захваченный из материализованного или упакованного хранилища
KindxlckText, 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;

См. также