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