HotXLS ドキュメント

TryGetCachedFormulaValue メソッド

数式を評価せず、ワークブックの状態も変更せずに、格納された数式の結果を読み取ります

このメソッドは IXLSWorkbook と TXLSXWorkbookの両方で利用できます。パッケージ ワークブックの実装は XLSX ファイルと ODS ファイルを対象とします

エンジンに依存しないコードは、 IXLSFormulaCacheReader によってどちらのエンジンからも CreateFormulaCacheReader を取得し、同じ照会メソッドを使用できます

構文

function TryGetCachedFormulaValue(
  SheetIndex, Row, Col: Integer;
  out AInfo: TXLSFormulaCacheInfo): Boolean;

座標と戻り値

SheetIndex、 Row、および Col は 1 始まりです

このメソッドが True を返すのは、キャッシュ状態が xlfcsLoaded または xlfcsCalculated

無効な座標、存在しないセル、数式以外のセルは False と xlfcsNotFormula

格納された結果を持たない数式は False と xlfcsMissingを返します。変更後に数式や計算が失敗した、以前キャッシュされていた数式は False と xlfcsInvalidated

キャッシュ情報

The TXLSFormulaCacheInfo レコードは、キャッシュを 2 つの列挙型で分類します。これらの列挙型は lxStandard: State is a TXLSFormulaCacheState and Kind a TXLSFormulaCacheValueKind

フィールド意味
State (TXLSFormulaCacheState)xlfcsNotFormula、 xlfcsMissing、 xlfcsLoaded、 xlfcsCalculated、または xlfcsInvalidated
Kind (TXLSFormulaCacheValueKind)xlfcvBlank、 xlfcvNumber、 xlfcvDateTime、 xlfcvString、 xlfcvBoolean、または xlfcvError
Valueメソッドが Trueを返す場合は所有されるキャッシュ済み Variant、それ以外は Unassigned

空の結果、空の文字列、ブールの false、数値の 0、エラーはそれぞれ異なる種類を維持し、キャッシュの有無の代用として使用されることはありません

BIFF の数値キャッシュは、レコードに日付型マーカーが存在しないため Double のままです。エラー キャッシュは varError

パッケージ ワークブックでは、OOXML の t="d" と ODF の日付値は varDateを返し、OOXML の t="e" は varErrorを返し、ODF のキャッシュされた空セルは void 値型のまま保持されます

数式を変更するとその以前のキャッシュは無効化され、キャッシュされた値を代入してから数式を代入すると計算済みのキャッシュが記録されます

各共有数式メンバーは固有のキャッシュの有無と値を保持します。格納された結果を持たないフォロワーは、ルート メンバーのキャッシュを継承する代わりに xlfcsMissing を報告します

計算なしのコントラクト

このメソッドはスパース セルへの直接参照を実行するだけで、計算機、ユーザー関数コールバック、数式トークンの逆コンパイル、依存関係の更新、キャッシュへの書き込み、ダーティ状態の変更を一切呼び出しません

計算が必要な場合は、通常のセルの Value プロパティを使用してください

リーダーの有効期間

CreateFormulaCacheReader は、ワークブックの所有権を移転することなく、ワークブックの有効期間リースに基づく読み取り専用アダプターを返します

ワークブックが破棄された後、そのアダプターを通じた照会は、解放済みのワークブック状態を逆参照する代わりに EXLSFormulaCacheReaderInvalidated を発生させます

例

Reader := Workbook.CreateFormulaCacheReader;
if Reader.TryGetCachedFormulaValue(1, 4, 2, Info) then
  Memo1.Lines.Add(VarToStr(Info.Value))
else if Info.State = xlfcsMissing then
  Memo1.Lines.Add('Formula has no stored result');

関連項目