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 单元格格式索引 |
Kind | xlckText、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;