HotXLS ドキュメント

CreateReadOnlyView メソッド

読み込み済みのクラシックまたは XLSX ワークブック モデルに対する軽量な読み取り専用ビューを作成します

構文

function CreateReadOnlyView: IXLSReadOnlyWorkbookView;

CreateReadOnlyView は、 IXLSWorkbook のクラシック lxHandle と IXLSXWorkbookOwner の XLSX lxHandleXによって宣言されています。共有されるビュー インターフェイス、オプション、スナップショット型は lxStandard

ビューの状態と有効期間

ビューの作成は定数時間であり、ワークシート、セル、スタイル、名前、図形を走査しません

各ビューは固有の 1 始まりの ActiveSheetIndexを持つため、複数のビューが、クラシックの ActiveSheetIndex や XLSX の ActiveIndex、 IsSelected、 ActiveTab

ビューは存在する間リード リースを保持し、ワークブックへの変更はモデルを変更する前に EXLSWorkbookWriteGuardUnavailable でフェイルファストします

ビューを使用するときは、クラシック ワークブックを IXLSWorkbook で、XLSX ワークブックを IXLSXWorkbookOwner で保持してください。オーナー インターフェイスとすべてのビューは同じ参照カウント方式のワークブックを保持し、どちらの順序でも解放できます

オーナー インターフェイスやビューがまだ参照している間に、具象クラスの Free や TXLSWorkbook に対して TXLSXWorkbook を呼び出さないでください

セル スナップショット

TryReadCell はビューのアクティブ シート上の 1 始まりの行と列の座標を使用し、その座標に格納されたセルが存在しない場合にのみ False を返します

存在しないセルの読み取りはストレージを作成せず、ワークブックの世代も進めません

TXLSReadOnlyCellSnapshot は、シート名、値、数式テキスト、キャッシュと評価の情報、座標、種類、スタイル インデックスを所有し、書き込み可能なワークブック オブジェクトを決して公開しません

フィールド意味
SheetIndex / SheetNameビュー ローカルのワークシート識別情報
Row / Col1 始まりのセル座標
StyleIndex格納されたクラシック XF インデックスまたは XLSX セル書式インデックス
Kindテキスト、数値、日時、ブール値、数式、エラー、空セルのいずれかの分類
Value再計算を行わない、格納されたスカラー値または数式キャッシュ値
HasFormulaCache / FormulaCache数式キャッシュの有無、由来、値の種類、および所有されるキャッシュ値TXLSFormulaCacheState), value kind (TXLSFormulaCacheValueKind), and owned cached value
FormulaEvaluationA TXLSFormulaEvaluationInfo record whose TXLSFormulaEvaluationState 評価が適用外、未要求、計算済み、失敗のいずれであったか、および評価結果コードと所有される結果値
Formula既定では空であり、数式テキストが明示的に有効化された場合にのみ設定されます

数式ポリシー

既定では、数式セルは既存の格納済みキャッシュを使用し、計算、ユーザー関数の呼び出し、ダーティ状態の更新、ワークブックへのキャッシュ書き戻しを一切行いません

数式テキストが必要な場合は xlsvIncludeFormulaText に Options を追加します。クラシックでは必要に応じてビュー専用のデコーダーを作成し、XLSX では格納された数式文字列をコピーします。どちらの経路もワークブックの計算機を初期化または変更しません TXLSReadOnlyViewOptions = set of TXLSReadOnlyViewOption。クラシックでは必要に応じてビュー専用のデコーダーを作成し、XLSX では保存された数式文字列をコピーします。どちらの経路もワークブックの計算機を初期化または変更しません

読み込み済みまたは計算済みのキャッシュを持たない数式は HasFormulaCache=False を報告し、 Value は Unassigned

数式を評価するには xlsvEvaluateFormulas を追加します。評価はビュー専用の計算機、再帰状態、スカラー キャッシュ、配列マトリックス キャッシュ、XLSX コンパイル済み数式キャッシュを通じて行われ、結果の Value と FormulaEvaluation.Value がワークブックの格納済みキャッシュやコンパイル済み数式のランタイム フィールドを置き換えることはありません

標準のスプレッドシート エラーは Variant とともに xlfesCalculatedエラー値として返され、サポートされない評価や内部評価の失敗は xlfesFailed を報告し、元の格納済みキャッシュを FormulaCache

1 つのビューを通じた繰り返し読み取りは、リース世代に対するそのビュー専用の評価キャッシュを再利用します。異なるビューは互いに独立しており、同じ共有数式を同時に評価できます

XLSX の外部数式評価はファイル ローカルの externalLink キャッシュのみを読み取り、弱参照の稼働中ワークブック登録を逆参照したり外部 I/O を実行したりすることはありません

スレッドとパフォーマンス

ワーカー スレッドごとに 1 つのビューを使用してください。別々のビューは異なるワークシートを走査したり同じ数式を同時に評価したりできますが、あるビューのアクティブ シートやオプションを別のスレッドから変更してはなりません

作成後の通常のセル読み取りは、リースが同時ワークブック変更を防ぐため、モニターやクリティカル セクションに入りません

解放検証では、各アイドル ビューの固定状態が 64 KiB 未満、100 個のアイドル ビューが 8 MiB 未満に保たれ、ビューの作成はワークブック サイズに依存せず、100 万セルのモデルに対して 1 ミリ秒の p95 ゲートを満たします

パフォーマンス スイートはさらに、アイドル ビューが既存のシングルスレッド カーソル走査に与える影響を 5 パーセントに制限し、検証ホスト上で 8 つのビューが独立したワークシートを走査することで、シングル ビューの少なくとも 5 倍のスループットに達することを求めます

例

var
  Workbook: IXLSWorkbook;
  View: IXLSReadOnlyWorkbookView;
  Cell: TXLSReadOnlyCellSnapshot;
begin
  Workbook := TXLSWorkbook.Create;
  Workbook.Sheets.Add;
  Workbook.Sheets[1].Cells[1, 1].Value := 'ready';

  View := Workbook.CreateReadOnlyView;
  View.Options := [xlsvEvaluateFormulas];
  if View.TryReadCell(1, 1, Cell) then
    Memo1.Lines.Add(VarToStr(Cell.Value));
end;

XLSX の場合は、ビューを作成する前に、オーナー インターフェイスを通じて具象ワークブックを保持してください

var
  Owner: IXLSXWorkbookOwner;
  Workbook: TXLSXWorkbook;
  View: IXLSReadOnlyWorkbookView;
begin
  Workbook := TXLSXWorkbook.Create;
  Owner := Workbook;
  Workbook.Sheets.Add('Data').Cells[1, 1].Value := 42;
  View := Owner.CreateReadOnlyView;
end;

関連項目