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;