直接讀取器與寫入器 API
TXLSDirectReader 與 TXLSDirectWriter 處理 XLSX 封裝時,不會把完整的工作表網格留在記憶體中,因此描述某張工作表的 API 呼叫,必須在對應的串流階段之前或期間進行
寫入器生命週期與儲存格數值
TXLSDirectWriter.BeginFile 或 BeginStream 啟動一個封裝,工作表方法一次定義一張工作表, Finish 則提交最終封裝
| Scalar cells | WriteString、 WriteRichString、 WriteNumber、 WriteBoolean、 WriteDateTime與 WriteError |
| Formula cells | WriteFormula、 WriteFormulaNumber、 WriteFormulaString、 WriteFormulaBoolean、 WriteFormulaDateTime與 WriteFormulaError 接受呼叫端提供的快取結果 |
| Shared strings | UseSharedStrings 啟用封裝層級的字串去重複 |
| Statistics | CellCount 回報已發出的儲存格數量 |
| Panes | FreezePanes(ColSplit, RowSplit) 在給定的 1 起始欄與列寫入凍結分割 |
在公開的寫入器介面上,資料列與資料行以 1 為基底,且必須依向前的活頁簿順序提供
工作表修補生命週期
BeginPatch 會取代一張工作表或插入新工作表,同時保留未觸及的封裝部分。初始化失敗時會立即釋放來源封存與來源串流,包括工作表遺失、必要的封裝部分遺失、封存無效或目的地建立失敗。來源檔案與呼叫端自有的暫存登記仍由呼叫端自行負責;釋放掉的控制代碼讓這些來源得以移除或釋放
Close 與物件銷毀即使沒有作用中的目的地、或修補收尾擲出例外,也會釋放來源控制代碼。目的地取代不成功時,會保留已暫存的輸出供檢查,寫入器在初始化失敗後仍可開始下一次修補或一般的檔案操作
可重複使用的樣式
AddCellStyle 註冊不可變的封裝層級樣式控制代碼, CloneCellStyle 則衍生新的控制代碼而不保留工作表資料列
定義名稱與超連結
AddDefinedName、 AddLocalDefinedName、 AddDefinedRange與 AddLocalDefinedRange 在封裝定案之前加入活頁簿層級或工作表本機名稱
AddHyperlink、 AddHyperlinkRange、 AddInternalHyperlink與 AddInternalHyperlinkRange 為單一儲存格或範圍發出外部關聯或內部工作表位置
資料驗證
AddDataValidation 與 AddDataValidationSqRef 暴露完整的規則介面,而 AddListValidation、 AddWholeNumberValidation、 AddDecimalValidation、 AddDateValidation、 AddTimeValidation、 AddTextLengthValidation與 AddCustomValidation 提供具型別的輔助方法
條件式格式
AddConditionalFormat、 AddConditionalFormatExpression、 AddConditionalFormatContainsText、 AddConditionalFormatNotContainsText、 AddConditionalFormatBeginsWith、 AddConditionalFormatEndsWith、 AddConditionalFormatTop10、 AddConditionalFormatAboveAverage、 AddConditionalFormatDuplicateValues、 AddConditionalFormatUniqueValues、 AddConditionalFormatContainsBlanks、 AddConditionalFormatNotContainsBlanks、 AddConditionalFormatContainsErrors與 AddConditionalFormatNotContainsErrors 加入純量規則
AddConditionalFormatDataBar、 AddConditionalFormatColorScale2、 AddConditionalFormatColorScale3與 AddConditionalFormatIconSet 加入視覺化規則; ClearConditionalFormats 移除目前工作表的待寫入規則
自動篩選與資料表
AddAutoFilterValue、 AddAutoFilterDateGroup與 AddAutoFilterSortCondition 設定工作表篩選
AddTable 建立資料表部件, AddTableFilterValue、 AddTableFilterDateGroup與 AddTableSortCondition 設定它的篩選與排序狀態
保護與分頁符
ProtectSheet、 UnprotectSheet、 AddProtectedRange與 ClearProtectedRanges 設定工作表保護; ProtectWorkbook 與 UnprotectWorkbook 設定活頁簿結構與視窗鎖
AddHorizontalPageBreak 與 AddVerticalPageBreak 為目前工作表發出手動分頁符
直接讀取器儲存診斷
TXLSDirectReader.SharedStringMemoryLimit 限制已解碼共用字串的記憶體, SharedStringsOnDisk 回報是否已移轉到暫存的索引式儲存, SharedStringCount 回報已載入的項目數, ParallelDiag 則暴露有界限的平行剖析器診斷
讀取器投射與公式狀態
FirstRow、 LastRow、 IncludeColumn與 ClearColumnProjection 會在配置數值、公式或富文字之前,把資料列與 1 起始資料行的選取下推到工作表剖析器
IncludeFormulaText 預設為 true;停用它會保留快取值、座標、樣式與 HasFormula ,但 FormulaTextAvailable 變成 false 且 Formula 保持空白
資料列游標
TXLSRowCursor.Open 接受 XLS、XLSX、XLSM、ODS、CSV 與 TSV 檔案或串流;ZIP 自動偵測會在開啟工作表之前,區分 ODS 封裝與 Open XML 活頁簿
SelectSheet 與 SelectSheetByName 選擇工作表; SheetCount、 SheetNames、 SheetIndex、 RowIndex與 Eof 暴露走訪狀態,而 SharedStringMemoryLimit 套用與直接讀取器相同的有界限共用字串政策
FirstRow、 LastRow、 IncludeColumn與 ClearColumnProjection 在所有游標格式中使用相同的 1 起始篩選;傳入的選項在 FindFirst 與 EOF 之間不可變更,但在 EOF、重新選擇工作表或關閉之後又變回可修改
每個 TXLSRowCursorCell 會獨立於 HasFormula 回報 FormulaTextAvailable;傳統 XLS 暴露公式存在性與快取結果,但不會聲稱有不可得的權杖文字,而 IncludeFormulaText 可以在累加之前就抑制 XLSX 與 ODS 的公式文字
ODS 走訪只保留一個實體資料列範本,把重複的列區塊裁切到要求的區間,直接在重複跨度內跳到所選資料行,越過被涵蓋的儲存格而不把它們當值回傳,並透過 OnSkippedRecord
State 區分 xrcsClosed、 xrcsBeforeFirst、 xrcsActive、 xrcsEof、 xrcsCancelled與 xrcsFaulted; Cancel 是冪等的,會使目前資料列失效並釋放作用中的工作表串流,但保留來源,讓明確的工作表選擇可以開始新一輪
串流多載預設為 xsoBorrowed,關閉時還原呼叫端的初始位置;傳 xsoOwned 則在成功開啟後移轉所有權;開啟失敗時永遠不會消耗呼叫端的所有權
CurrentRowView 借用目前資料列陣列而不複製,並在每次存取前檢查產生序號;前進、選擇、取消、關閉或銷毀游標都會使檢視失效,之後的存取會引發 EXLSRowCursorViewInvalidated on later access
PeakRowBufferedBytes 是自最近一次 Open 起的單調估計值,統計為一個邏輯資料列保留的儲存格記錄、受管理承載、富文字與格式後端資料;它定位為有界限記憶體的迴歸診斷,而非精確的堆積會計
SheetPassesStarted 計數成功啟動的工作表後端;透過回呼門面查看工作表名稱或跳過工作表,並不會開啟工作表部件
前向回呼配接器
TXLSForwardReader 把 XLS、XLSX、ODS、CSV 與 TSV 的解碼委派給 TXLSRowCursor,把目前資料列的每個儲存格轉成 OnCell 回呼,並保留同一套資料列界限、資料行投射、公式狀態、富文字、密碼、略過記錄、串流位置與有界限緩衝的合約
PeakRowBufferedBytes 與 SheetPassesStarted 在回呼介面上暴露共用的游標診斷;傳統 XLS 另外保留 ClassicBytesRead 與 ClassicPeakBufferedBytes
讀取器事件與記錄型別
讀取器與資料列游標暴露選用的回呼與純記錄,全部宣告在 lxDirectRead。每個回呼都是同一個形狀:記錄描述一個串流項目,設定 Abort 即停止掃描(工作表事件另可設 SkipSheet)
| Cells | OnCell (型別 TXLSDirectCellEvent)為每個儲存格交付一個 TXLSDirectCell ,其 Kind (TXLSDirectCellKind: xdkEmpty、 xdkNumber、 xdkString、 xdkBoolean、 xdkDate、 xdkError)決定哪個值欄位有內容;富文字以 TXLSDirectRichText 傳遞,內含 TXLSDirectRichTextRun 項目,每個 run 帶 TXLSDirectRichColor (種類 TXLSDirectRichColorKind)、 TXLSDirectRichUnderline與 TXLSDirectRichVertAlign,外加選擇性的 TXLSDirectPhoneticProperties 與 TXLSDirectPhoneticRun 資料 |
| Sheet framing | OnSheet (TXLSDirectSheetEvent)可在工作表儲存格被剖析前整張跳過; OnSkippedRecord (TXLSDirectSkippedEvent)帶記錄 id 與原因回報格式錯誤或被截斷的內容 |
| Sheet layout | OnDimension、 OnSheetFormat、 OnColumn、 OnRow、 OnMerge與 OnPane 交付 TXLSDirectDimension、 TXLSDirectSheetFormat、 TXLSDirectColumn、 TXLSDirectRow、 TXLSDirectMerge與 TXLSDirectPane 記錄;窗格狀態使用 TXLSDirectPaneState (xdpsSplit、 xdpsFrozen、 xdpsFrozenSplit、 xdpsUnknown) |
| Cursor state | TXLSRowCursor.State 是 TXLSRowCursorState (xrcsClosed、 xrcsBeforeFirst、 xrcsActive、 xrcsEof、 xrcsCancelled、 xrcsFaulted); Open 的串流多載接受 TXLSStreamOwnership (預設xsoBorrowed , xsoOwned 移轉所有權), CurrentRowView 傳回借用的 IXLSRowCursorView 檢視,其 Valid 屬性守護存取、 ValueByCol 不複製地讀取借用列中的單一儲存格;游標前進時檢視即失效 |
寫入器參數與樣式型別
寫入器的具型別輔助方法(lxDirectWrite)接受記錄與列舉,讓呼叫保持零配置: WriteRichString 接受 TXLSDirectRichText; AddCellStyle 以 TXLSDirectCellStyle 建立封裝層級樣式,其對齊(TXLSDirectHorizontalAlignment、 TXLSDirectVerticalAlignment)、底線(TXLSDirectUnderline)、填滿圖樣(TXLSDirectFillPattern)與框線邊(TXLSDirectStyleBorder 搭 TXLSDirectBorderSide)都映射 OOXML 樣式模型。條件式格式傳 TXLSDirectConditionalFormat ,搭配 TXLSDirectCfKind / TXLSDirectCfOperator / TXLSDirectCfValue / TXLSDirectCfValueKind 與 TXLSDirectIconSetType;資料驗證傳 TXLSDirectDataValidation;資料表傳 TXLSDirectTable;超連結傳 TXLSDirectHyperlink;定義名稱傳 TXLSDirectDefinedName;差異樣式傳 TXLSDirectDxfStyle;註解傳 TXLSDirectComment;影像傳帶 TXLSDirectImage 的 TXLSDirectImageFormat;圖表傳帶 TXLSDirectChart 與 TXLSDirectChartSeries 的 TXLSDirectChartType;合併傳 TXLSDirectMergeRange;受保護範圍傳 TXLSDirectProtectedRange;工作表保護傳 TXLSDirectSheetProtectionOptions 的 TXLSDirectSheetProtectionOption集合;自動篩選排序狀態傳 TXLSDirectSortState;欄選項傳 TXLSDirectColumnOption;頁面幾何傳 TXLSDirectPageMargins 記錄
TXLSDirectNeedRow = procedure(Sender: TObject; RowIndex: Integer;
var Eof: Boolean) of object;
function XLSDirectColName(Col: Integer): WideString;
function XLSDirectParseRef(const Ref: WideString;
out Col, Row: Integer): Boolean;
function XLSDirectPasswordHash(const Password: WideString): WideString;
OnNeedRow 從應用程式拉取資料列:供應端直接透過寫入器寫出這一列的儲存格並讓 Eof = False,或以 Eof = True 宣告耗盡來結束迴圈。這些輔助方法負責座標與保護基元之間的轉換: XLSDirectColName 把 0 起始資料行渲染成 A1 字母、 XLSDirectParseRef 解析 A1 儲存格參照, XLSDirectPasswordHash 則計算工作表保護記錄所儲存的舊式密碼雜湊