HotXLS 文件

已載入活頁簿的結構世代

結構世代讓讀取端能夠保留成本極低的快照,並在其所依賴的活頁簿拓撲已經變更之後拒絕走訪

世代來源

引擎儲存格儲存區世代工作表集合世代
傳統 XLSTXLSWorksheet.CellStructureGenerationTXLSWorksheets.StructureGeneration
XLSXTXLSXWorksheet.CellStructureGeneration 或 TXLSXCells.StructureGenerationTXLSXSheets.StructureGeneration

每個屬性都是唯讀的 UInt64 值,其變更的確切幅度不屬於合約範圍

會導致失效的作業

建立、移除或清除已儲存儲存格,會在拓撲確實變更時改變儲存格儲存區世代

資料列或資料行的插入與刪除、座標移動、封裝附加或具體化,以及明確的儲存格索引重建,也會使儲存格儲存區走訪狀態失效

新增、刪除、移動或清除工作表,會在集合確實變更時改變工作表集合世代

不會導致失效的作業

變更現有儲存格的值、公式、快取值或格式,不會改變其儲存格儲存區世代

重新命名或啟用工作表不會改變工作表集合世代;沒有實際效果的移動、刪除不存在的項目或清除已經是空的集合,都會保持目前的世代

驗證

在推進或讀取為較早世代建立的走訪狀態之前,請呼叫 XlsValidateStructureGeneration

不相符時會引發 EXLSLoadedCellCursorInvalidated,讓呼叫端能夠區分結構失效與資料或格式錯誤

ExpectedGeneration := Worksheet.CellStructureGeneration;

{ Read or retain traversal state }

XlsValidateStructureGeneration(
  ExpectedGeneration,
  Worksheet.CellStructureGeneration);

傳統活頁簿游標

IXLSWorkbook.CreateLoadedCellCursor 會擷取傳統活頁簿的彙總世代,並在每次 MoveNext 與 Current 呼叫之前對它進行驗證

游標以固定的游標狀態直接走訪已配置的稀疏儲存分支,並傳回自有的 TXLSLoadedCellSnapshot 值

布林多載會固定是否納入具有獨立樣式的已儲存空白儲存格;繼承的資料列、資料行與工作表格式不會建立空白的游標項目

XLSX 活頁簿游標

TXLSXWorkbook.CreateLoadedCellCursor 會擷取一個活頁簿存留期租用與一個彙總拓撲世代,兩者由每個工作表的儲存格儲存區與工作表集合所共用

已具體化的路徑會直接讀取稀疏資料列區塊,而封裝路徑會重複使用封裝迭代器,不會具體化儲存格,也不會在快照中保留內部指標

布林多載可以在兩種儲存表示中納入只有樣式的已儲存空白儲存格,而無樣式的 Empty 與 Null 佔位項仍被排除

釋放活頁簿會在工作表儲存區被釋放之前使其租用失效,因此之後的游標存取會引發 EXLSLoadedCellCursorInvalidated

並行界限

世代檢查只提供快速失敗偵測,並無法讓並行的活頁簿變更與走訪變成執行緒安全的

另請參閱