読み込み済みワークブック構造の世代
構造の世代により、リーダーは低コストのスナップショットを保持し、依存しているワークブック トポロジが変化した後の走査を拒否できます
世代のソース
| エンジン | セル ストアの世代 | ワークシート コレクションの世代 |
|---|---|---|
| クラシック XLS | TXLSWorksheet.CellStructureGeneration | TXLSWorksheets.StructureGeneration |
| XLSX | TXLSXWorksheet.CellStructureGeneration または TXLSXCells.StructureGeneration | TXLSXSheets.StructureGeneration |
各プロパティは読み取り専用の UInt64 値であり、変化量そのものはコントラクトの対象ではありません
無効化する操作
格納セルの作成、削除、クリアは、トポロジが実際に変化したときにセル ストアの世代を変更します
行や列の挿入と削除、座標の移動、パックされた追加や実体化、明示的なセル インデックスの再構築も、セル ストアの走査状態を無効化します
ワークシートの追加、削除、移動、クリアは、コレクションが実際に変化したときにワークシート コレクションの世代を変更します
無効化しない操作
既存のセルの値、数式、キャッシュされた値、または書式を変更しても、そのセル ストアの世代は変化しません
ワークシートの名前変更やアクティブ化はワークシート コレクションの世代を変化させず、何もしない移動、存在しないものの削除、すでに空のコレクションのクリアは現在の世代を維持します
検証
以前の世代のために作成された走査状態を進めたり読み取ったりする前に、XlsValidateStructureGeneration を呼び出してください
不一致の場合は EXLSLoadedCellCursorInvalidated が発生するため、呼び出し側は構造的な無効化をデータや書式のエラーと区別できます
ExpectedGeneration := Worksheet.CellStructureGeneration;
{ Read or retain traversal state }
XlsValidateStructureGeneration(
ExpectedGeneration,
Worksheet.CellStructureGeneration);
クラシック ワークブック カーソル
IXLSWorkbook.CreateLoadedCellCursor はクラシック ワークブックの集約世代をキャプチャし、すべての MoveNext と Current の呼び出しの前にそれを検証します
カーソルは割り当て済みのスパース ストレージ ブランチを直接たどり、カーソル状態は一定であり、所有される TXLSLoadedCellSnapshot 値を返します
ブール値のオーバーロードは、独立したスタイルを持つ格納済み空セルを含めるかどうかを固定します。継承された行、列、ワークシートの書式は空のカーソル エントリを作成しません
XLSX ワークブック カーソル
TXLSXWorkbook.CreateLoadedCellCursor は、ワークブックの有効期間リースと、すべてのワークシート セル ストアとワークシート コレクションで共有される集約トポロジ世代をキャプチャします
実体化されたパスはスパースな行ブロックを直接読み取り、パックされたパスはセルを実体化したりスナップショット内に内部ポインターを保持したりせずに、パックされたイテレーターを再利用します
ブール値のオーバーロードは、どちらのストレージ表現でもスタイルのみを持つ格納済み空セルを含められます。スタイルなしの Empty および Null プレースホルダーは引き続き除外されます
ワークブックを解放すると、ワークシート ストレージが解放される前にそのリースが無効化されるため、その後のカーソル アクセスは EXLSLoadedCellCursorInvalidated を発生させます
コンカレンシーの境界
世代チェックはフェイルファストな検出のみを提供し、同時に行われるワークブックの変更と走査をスレッドセーフにはしません