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 record classifies the cache through two enums declared in 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、數值零與錯誤會保留各自不同的種類,不會被當成快取存在性的替代標記

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');

另請參閱