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;