HotXLS 文档

CreateLoadedCellCursor 方法

在已加载的 XLSX 工作簿中创建一个遍历已存储单元格的拉取式游标,并可通过选项包含具有独立样式的空白单元格

语法

function CreateLoadedCellCursor: IXLSLoadedCellCursor; overload;
function CreateLoadedCellCursor(
  AIncludeStoredBlanks: Boolean): IXLSLoadedCellCursor; overload;

遍历顺序与成本

游标按集合顺序访问各工作表,然后按行和列升序访问单元格

SheetIndex、Row 和 Col 是从 1 开始的公共坐标

已具体化的工作表直接从其已分配的 256 行稀疏块中读取,无需构建排序后的单元格列表

打包工作表通过打包存储迭代器直接读取,并在遍历之后保持打包状态

游标状态相对于工作簿大小是恒定的,不会分配与 XLSX 行或列上限同样大小的数组

无参数重载会跳过只有样式的空白单元格、已存储的 Empty 占位符以及已存储的 Null 占位符

传入 True 可包含来自已具体化存储或打包存储中具有独立样式的空白坐标,而不会具体化打包单元格

在两种模式下,无样式的 Empty 和 Null 占位符仍被排除在外

快照字段

字段含义
SheetIndex / SheetName捕获时所属工作表的标识
Row / Col从 1 开始的单元格坐标
StyleIndex从已具体化存储或打包存储中捕获的 XLSX 单元格格式索引
KindxlckText、xlckNumber、xlckDateTime、xlckBoolean、xlckFormula、xlckError 或 xlckBlank
Value为当前单元格捕获的自有 Variant 值
Formula公式单元格的公式文本,否则为空字符串

TXLSLoadedCellSnapshot 中的字符串和 Variant 是自有值,不暴露内部单元格或打包存储指针

对于 XLSX 公式单元格,Value 是当前存储的缓存值,遍历不会重新计算公式

对于 xlckBlank,Value 为 Unassigned,Formula 为空,StyleIndex 标识已存储的单元格格式

状态、失效与生命周期

State 在第一次成功的 MoveNext 之前为 xlccBeforeFirst,在 Current 可用期间为 xlccActive,在遍历完成之后为 xlccEof

在第一个单元格之前或 EOF 之后读取 Current 会引发 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;

另请参阅