HotXLS 文件

安全的樞紐分析工作表具體化

版本 2.384.90 新增隔離的樞紐分析評估與有防護的工作表結果替換;版本 2.384.92 把受支援的本機來源擴充到每次呼叫都解析的定義名稱與資料表

具體化一個檢視

if Workbook.RefreshPivotCache(Pivot.CacheId) <> 1 then
  raise Exception.Create('Pivot cache refresh failed');
if Workbook.MaterializePivotTable(Pivot) <> 1 then
  raise Exception.Create('Pivot output cannot be replaced safely');

TXLSXWorkbook.MaterializePivotTable(ATable: TXLSPivotTable): Integer 從目前快取計算結果,放到檢視的 FirstRow 與 FirstCol;成功回傳 1,來源不受支援、目的地不安全、評估失敗或活頁簿修改被拒時回傳 -1

重新整理與工作表重算仍是明確操作;成功的具體化會使計算相依性失效,呼叫端可以在合適時機重算下游公式

預設多載接受空白的目的地儲存格,以及先前由同一檢視持有且未變更的儲存格;完整輸出矩形內任何被佔用且無主的儲存格都會讓操作被拒,包括結果寫入器不會填的空隙

if Workbook.MaterializePivotTable(Pivot, True) <> 1 then
  raise Exception.Create('Existing Pivot values cannot be adopted safely');

TXLSXWorkbook.MaterializePivotTable(ATable: TXLSPivotTable; AAdoptExisting: Boolean): Integer 可以在第一次具體化時,明確收養檢視宣告的前次矩形內既有的純量儲存格;它不授權替換公式、陣列成員、rich text、帶中繼資料的儲存格,或該矩形之外的內容

擁有權、調整大小與搬移

檢視為寫入的儲存格保留精確座標與具型別值快照;XLSX 儲存把這份擁有權保存在樞紐定義中,重新開啟後的更新仍可驗證它

具型別內容有變或被持有的非空白儲存格被移除時,整個更新會被拒絕;數值子型別共用標準的數值表示,文字、布林值與錯誤則保留相異身分

縮小或搬移結果只清空不再產生的未變更持有值;既有的儲存格物件、格式與註解繼續可用,無關儲存格不在擁有權集合內

變更 FirstRow 或 FirstCol 會搬移下一次輸出,先前的擁有權座標仍可用於清理;空結果會清空持有值,並保留僅錨點的位置

隔離預覽

function TXLSPivotTable.MakePreview(AWriter: TlxPivotResultWriter): Integer;
property TXLSPivotTable.EvaluationSourceTable: TXLSPivotTable;

TXLSPivotTable.MakePreview 使用快取與檢視的獨立副本,包括計算欄位預留位置,並在評估後丟棄;普通的 Make 保留其既有的現用快取行為

寫入器收到以零為基底的列欄偏移與具型別值;回傳值跟隨 Make 的彙總儲存格數,與寫入器被呼叫的次數無關;缺少快取或寫入器回傳零,評估或寫入器例外照常往外傳

呼叫端的記錄述詞與已註冊的擁有者篩選在預覽中仍然有效,包括活頁簿的交叉分析篩選器選取;回呼收到的是暫時評估的檢視與其暫時快取

TXLSPivotTable.EvaluationSourceTable 對普通評估回傳現用檢視,對預覽回傳原始的現用檢視;當回呼需要識別已連接的檢視時用它,而評估後的記錄則從回呼的暫時 Cache 讀取

回呼擁有者仍由呼叫端持有;回呼或預覽呼叫結束後,不得保留預覽物件與其記錄

安全邊界

具體化要求檢視與快取註冊在同一個活頁簿中,且來源是受支援的本機矩形、定義名稱或資料表;來源解析跟隨目前的名稱與資料表範圍,不受支援或無法解析的來源會在修改前被拒

當前來源幾何、其他樞紐位置、結構化資料表、查詢結果範圍、合併儲存格,以及固定或動態陣列,都不得與新輸出或需要清理的舊持有儲存格相交;資料表總計即使不進快取記錄,仍受保護

驗證與輸出暫存在讀取租約下執行,接著是一般的活頁簿修改防護與世代檢查;凍結的唯讀活頁簿檢視會拒絕具體化,不替換儲存格也不改變幾何

篩選必須是唯讀,並遵守活頁簿一般的單寫入器契約;隔離能防止正常的預覽計算改動現用快取,但回呼透過另行捕捉的現用物件所做的任意寫入無法回復

這個操作具體化的是程式庫自己的計算結果版面;完整的原生樞紐版面撰寫、交叉分析篩選器 UI 建立與交叉篩選無資料顯示評估,仍是各自獨立的能力