HotXLS Docs

其他函式庫 API 成員

本頁補足支援主要 Workbook、工作表、轉譯、匯入、診斷及檢視器 API 的公開型別參考,這些型別不需要另設工作導向指南

篩選與條件式格式

TXLSAutofilterAdd、 AddAutofilterData、 AssignFrom、 Clear與 ParseAutofilterData 可編輯或匯入篩選定義; SetRangeBounds(ARow1, ACol1, ARow2, ACol2) 可還原以 1 為基數的包含邊界而不移除已載入的準則或下拉圖形,並忽略非正值或反轉的邊界,以及與已載入欄位數不同的欄數; Defined、 FirstRow、 FirstCol、 LastCol、 LastRow與 FieldCount 公開其作用中邊界與已篩選欄數
TXLSAutofilterItemShape 公開與該項目關聯的篩選按鈕繪圖,載入的篩選準則則以 TXLSAutofilterDOPER 運算元記錄的形式提供—— DataType 選擇運算元形式, grbitSgn 攜帶正負號與旗標位元——可供檢查或往返編輯
TXLSDataBarSpecAxisColor、 AxisIsThemeColor、 AxisThemeColorId、 AxisThemeColorTint與 ClearAxisThemeColor 控制座標軸; Direction、 GradientFill、 NegativeBarBorderColorSameAsPositive、 NegativeBarColor、 NegativeBarColorSameAsPositive與 NegativeBorderColor 控制資料橫條外觀; IsIndexedColor、 IndexedColorIndex與 ClearIndexedColor 管理使用調色盤索引的橫條色彩
TXLSIconSetSpecThresholdEqualsInclude 為每個圖示臨界值選擇包含或排除等號的比較
TXLSCfValueIsIndexedColor 與 IndexedColorIndex 會回報以舊式調色盤索引儲存的臨界值色彩, ClearIndexedColor 可移除該形式,而現有存取子仍可取得佈景主題或常值色彩

TXLSCfValue、 TXLSDataBarSpec、 TXLSColorScaleSpec、 TXLSIconSetSpec與 TXLSDxfStyle 都接受 AttachWriteGuardOwner,可將規則物件連結到其擁有的 Workbook,讓編輯自動取得寫入保護;擁有者需實作 TXLSCondFormatWriteGuardOwner,其唯一的 AcquireWriteGuard 方法會把 Workbook 的寫入保護交給規則。 TXLSDxfStyle 新增 FontColorIndex 與 FontColorIsIndexed ,以及用於調色盤索引規則色彩的 FillFgColorIndex / FillFgColorIsIndexed 與 FillBgColorIndex / FillBgColorIsIndexed 成對成員,再加上差異字型覆寫 FontName、 FontSize與 FontScheme (空字串、點數大小,或 major / minor這類佈景主題字型槽位),與既有的粗體、斜體、底線及色彩成員並列;每次指派都會取得寫入保護,並將規則標記為 dirty 以便重新輸出

TXLSConnections、 TXLSDataTables與 TXLSQueryTables 公開 OnAcquireWriteGuard (型別分別為 TXLSConnectionAcquireWriteGuard、 TXLSDataTableAcquireWriteGuard與 TXLSQueryTableAcquireWriteGuard),其編輯路徑會在變更前透過這個掛鉤取得擁有 Workbook 的 IXLSWorkbookWriteGuard ,並在之後推進 Workbook 世代;保護會記錄 StartGeneration, Complete 則標記寫入已完成,讓相依快取得以重建

保留下來的資料連線帶有具型別的描述: TXLSConnectionKind (xlckUnknown、 xlckOdbc、 xlckDao、 xlckFile、 xlckWeb、 xlckOleDb、 xlckText、 xlckAdo)為連線分類, TXLSConnectionCredentials (xlccIntegrated、 xlccNone、 xlccStored、 xlccPrompt)記錄其驗證模式,每個連線參數值則以 TXLSConnectionParameterValueKind (xlcpvNone、 xlcpvBoolean、 xlcpvDouble、 xlcpvInteger、 xlcpvString、 xlcpvCell)標記。模擬分析資料表透過 TXLSDataTableKind

模擬分析資料表與樞紐群組

TXLSDataTableAssign、 ContainsCell與 IsRoot 可複製及檢查資料表; Kind、 FirstRow、 FirstCol、 LastCol、 LastRow、 AlwaysCalculate、 ColumnInputCol、 ColumnInputRow、 ColumnInputDeleted、 RowInputCol、 RowInputRow與 RowInputDeleted 公開已儲存的計算定義
TXLSDataTablesAdd、 AddExisting、 Delete、 Clear、 Assign、 AdjustForShift與 Offset 維護集合; FindByCell 與 FindRoot 尋找包含指定儲存格或以其為根的資料表; Count、 Items與 OnChange 公開集合狀態
TXLSPivotCacheFieldGroupBaseField 與 GroupParentField 公開已群組欄位與其來源或父欄位的關係

圖示集臨界值可以用程式繪製或驗證: XLSCfIconSetCount 回報某個 TXLSIconSetType 定義了幾個圖示, XLSBuildCfIconGeometry 則把繪製單一圖示所需的基本圖元( TXLSCfIconGeometry ,種類為TXLSCfIconPrimitive: TXLSCfIconPrimitiveKind、 cfipPolygon、 cfipEllipse、 cfipRect)與點( cfipLine)填入TXLSCfIconPoint,讓自訂轉譯器能與 Excel 內建的圖示形狀一致

診斷、公式追蹤與驗證

TXLSDiagnosticCode、 NativeCode、 Message、 Severity、 ExceptionClass、 PartName、 RecordId、 SheetIndex、 SheetName與 StreamOffset 識別一項剖析器、寫入器或套件診斷
TXLSDiagnosticsAdd 附加診斷、 Clear 重設集合,而 Count 與 Items 列舉其項目
TXLSDiagnosticSeverity and TXLSDiagnosticOperationTXLSDiagnosticSeverity (xlsDiagnosticInfo、 xlsDiagnosticWarning、 xlsDiagnosticError、 xlsDiagnosticFatal)為單一診斷分類, TXLSDiagnosticOperation (xlsOperationNone、 xlsOperationOpen、 xlsOperationSave、 xlsOperationCalculate、 xlsOperationExport)指出產生該診斷的階段; OnDiagnostic 處理常式可從收到的 TXLSDiagnostic
TXLSFormulaDebugSessionCurrentStep、 DependencyCount、 NodeCount與 StepCount 公開目前的偵錯器快照與其追蹤大小
TXLSFormulaTracerStepCount 回報已記錄的評估步驟數
TXLSImportCheckAddRule、 AddUniqueRule與 AddCrossColumnRule 設定欄位述詞、複合唯一性與具型別比較; Check 從已儲存的工作表值與公式快取回傳結構化的違規項目,不重新計算也不具現化壓縮儲存格; HeaderRow、 FirstRow、 LastRow、 OnVerifyCell、 ViolationCount與 Violation 公開邊界、回呼與結果; Annotate 與 KeepOnlyViolations 是明確的修正活頁簿操作;型別、界限、日期系統、元組身分與失敗行為請見匯入驗證結構描述

匯入驗證結構描述

來自 lxImportCheck 的 TXLSImportCheck 會以應用程式自有的規則驗證 TXLSXWorksheet;它檢查已儲存的純量值與已儲存的公式結果,座標以 1 為基數,且不對文字到數字、文字到日期或文字到布林做隱含轉換

Validator := TXLSImportCheck.Create;
try
  Validator.HeaderRow := 1;
  Rule := Validator.AddRule(2);
  Rule.Name := 'quantity';
  Rule.Flags := [irRequired, irValueType, irValueRange];
  Rule.ValueKind := ivkInteger;
  Rule.MinimumValue := 1;
  Rule.MaximumValue := 1000;

  Validator.AddUniqueRule([1, 3]).Name := 'account-and-region';
  Validator.AddCrossColumnRule(4, 5, icLessOrEqual).Name := 'start-before-end';
  FailureCount := Validator.Check(Sheet);
  if FailureCount > 0 then
    Validator.Annotate(Sheet, 'Import validator');
finally
  Validator.Free;
end;

HeaderRow > 0 時從下一列開始檢查並優先於 FirstRow;否則 FirstRow 預設為 1;LastRow = 0 使用工作表最後一個使用中的列,而正的 LastRow 可以納入不存在的儲存格但不建立它們;欄位必須在 1 到 16,384 之間,作用中的資料列邊界必須在 1 到 1,048,576 之間

欄位規則與明確型別

TlxImportColumnRuleColumn、 Flags、 Name、 Title、 MinLength、 MaxLength、 Pattern、 ValueKind與 DateSerialMode 設定單一欄位; MinimumValue、 MaximumValue、 HasMinimum、 HasMaximum、 MinimumInclusive與 MaximumInclusive 設定界限; Validate 檢查結構描述設定, PreparePattern 準備 regex;兩個 Check 多載回傳 Boolean 並附帶錯誤訊息,還可選擇回傳 TlxImportViolationKind
TlxImportRuleFlagsirRequired、 irTextLength、 irPattern、 irUnique與 irCallback 保留既有的檢查; irValueType 啟用 ValueKind , irValueRange 啟用設定的界限;未設定任何旗標的欄位不會被檢查
TlxImportValueKindivkAny 接受支援的有限純量值, ivkNumber 接受有限的數值 Variant, ivkInteger 額外要求整數值, ivkDate 接受日期 Variant 或明確啟用的 Excel serial, ivkBoolean 要求 Boolean Variant, ivkText 則要求字串 Variant
TlxImportDateSerialModeidsNone 是預設值,讓數值與日期保持區別; idsExcel1900 與 idsExcel1904 針對使用 irValueType 且 ValueKind = ivkDate 的欄位,明確解讀數值

AddRule(Column) 會取代並釋放該欄位先前的規則;逐值的型別、範圍、長度與模式述詞會略過缺漏值、null 與空字串, irRequired 則回報它們;唯一性保留下面描述的各種原則;非空白的空白字元仍視為一個值;數字不算 Boolean,日期不算一般數字,而看似數字的字串仍是文字

指派 MinimumValue 或 MaximumValue 會啟用對應界限; HasMinimum 或 HasMaximum 任一可以再次停用它;兩個包含性開關預設都是 True;界限必須是有限的具型別數字或日期,兩個界限必須可比較且描述非空區間;反轉、缺漏、不相容或空白的界限會在工作表驗證開始前就引發例外

數字界限比較數值,日期界限比較日期;整數對整數的比較保留 Int64 與 UInt64 的全部位元;不相容類別的值會讓範圍檢查失敗;文字長度與 regex 述詞仍檢查純量的文字表示,regex 檢查也保留既有的 IsMatch 行為,因此當必須比對完整文字時請使用 ^...$ 這類錨點;無效的 regex 會停用其模式檢查以維持相容性

格式化為日期的 Excel 值

從 Excel 匯入的儲存格即使數字格式顯示日期,內容仍可能是數值 serial;當接受的匯入結構描述如此時,請明確選擇 serial 模式;該模式只影響驗證,絕不變更已儲存的儲存格值

Rule := Validator.AddRule(4);
Rule.Flags := [irRequired, irValueType, irValueRange];
Rule.ValueKind := ivkDate;
if Sheet.Workbook.Date1904 then
  Rule.DateSerialMode := idsExcel1904
else
  Rule.DateSerialMode := idsExcel1900;
Rule.MinimumValue := VarFromDateTime(EncodeDate(2026, 1, 1));
Rule.MaximumValue := VarFromDateTime(EncodeDate(2026, 12, 31));

VarFromDateTime 宣告於 Variants , EncodeDate 宣告於 SysUtils;數值 serial 必須為非負,且必須在西元 10000 年 1 月 1 日之前解析;帶小數的 serial 保留其時刻;1900 系統拒絕 60(含)到 61(不含)之間的每一個 serial,因為該區間表示虛構的閏日;1904 系統把 serial 0 對應到 1904 年 1 月 1 日

日期界限包含時刻,因此最大值設為 12 月 31 日午夜會排除當天更晚的時間;當必須接受整個最後一天時,請用隔年 1 月 1 日的排除式上界; 10/08/2026 這類文字日期無論設定的 serial 模式為何都保持為文字

複合唯一性與跨欄比較

AddUniqueRule(const AColumns: array of Integer): TlxImportUniqueRule在有序、非空且欄位互異的清單上加入獨立的元組約束; Name 識別規則, Title 作為訊息前綴, ColumnCount 與以 0 為基數的 Columns[Index] 公開其成員, SkipIncompleteRows 預設為 True
AddCrossColumnRule(ALeftColumn, ARightColumn: Integer; AComparison: TlxImportComparison): TlxImportCrossColumnRule加入同列比較,具有唯讀的 LeftColumn 與 RightColumn ,以及可編輯的 Comparison、 Name、 Title與 SkipBlankValues (預設 True)
TlxImportComparisonicEqual、 icNotEqual、 icLess、 icLessOrEqual、 icGreater與 icGreaterOrEqual 選擇關係;數字對與日期對比較其值,Boolean 對以 False 排在 True 之前,字串對則以區分大小寫的 UTF-16 code unit 做序數比較

複合鍵保留每個成員確切的 Variant 型別與文字身分; Integer(1)、 Double(1)、字串 '1'、Boolean 與日期是彼此不同的成員;沒有大小寫摺疊、Unicode 正規化、地區解析或分隔符號歧義; ('ab', 'c') 與 ('a', 'bc') 這類組合仍是不同的;每次驗證都從全新的元組索引開始

當 SkipIncompleteRows = True ,缺漏、null 或空字串成員會把該列排除在元組唯一性之外;設為 False 則以原始 Variant 身分納入這些成員;重複項會以第一個元組欄位作為儲存格位址,並透過 FirstDuplicateRow 回報第一個符合的列

既有的單欄 irUnique 保留其以文字為基礎、不分大小寫的比對行為,並略過缺漏或 null 值;當單一欄位需要嚴格的具型別身分時,請使用 AddUniqueRule([Column])

跨欄比較絕不把字串強制轉為數字、數字轉為 Boolean 或一般數字轉為日期;混合不相容類別即使對 icNotEqual 也會失敗;字串比較區分組合與分解的 Unicode、保留內嵌的 null 字元,並採用較短前綴優先的排序;當 SkipBlankValues = False ,任一空白運算元都會產生跨欄違規

結構化結果與修正活頁簿

TlxImportViolationRow、 Col、 SheetName與 Address 識別儲存格, Address 採 A1 記法; ValueText 與 ErrorText 攜帶顯示資訊; RuleName 與 Kind 識別設定的規則與失敗類別; RelatedColumn 識別跨欄失敗的第二個運算元, FirstDuplicateRow 則識別唯一性失敗的原始列
TlxImportViolationKindivRequired、 ivTextLength、 ivPattern、 ivUnique、 ivCallback、 ivValueType、 ivValueRange、 ivCellError、 ivFormulaCacheMissing、 ivCompositeUnique與 ivCrossColumn 區分支援的失敗類別

Check(Sheet) 回傳違規數, ViolationCount 加上以 0 為基數的 Violation(Index) 列舉報告;單一欄位規則回報其第一個失敗的述詞,而獨立設定的元組與比較規則可以為同一儲存格追加更多違規;當呼叫端需要穩定的應用程式規則識別時,請指派有意義的 Name

公式儲存格以已儲存的快取值驗證;沒有已儲存快取結果的公式回報 ivFormulaCacheMissing ,錯誤結果則回報 ivCellError;需要最新的公式結果時,請在檢查前明確重新計算;驗證不存取外部來源、不變更公式定義,也不計算未快取的公式

OnVerifyCell 保留 TlxImportVerifyCell 回呼簽章,並在適用的欄位述詞與唯一性檢查成功後執行;它回傳 Boolean 且可以設定應用程式錯誤訊息;回呼必須保持活頁簿與驗證結構描述不變,活頁簿寫入會被讀取租約拒絕;回呼例外會向外傳播,租約則釋放給後續操作

Check 絕不註記、刪除列或具現化壓縮值;請在檢查後使用 Annotate 套用紅色字型並把錯誤文字附加到既有註解,或明確呼叫 KeepOnlyViolations 移除未違規的列以建立修正活頁簿;這些方法會修改傳入的工作表,因此請在審閱報告後於目標活頁簿上呼叫

驗證會在同步呼叫期間借用工作表與活頁簿;它不採用呼叫端的物件所有權,也不要求介面持有的活頁簿;讀取租約會在整個檢查期間保護相關的已儲存儲存格快照與已儲存公式快取存取

TXLSExternalLinkUpdateMode = (xluPromptUser, xluNever, xluAlways);

property IXLSWorkbook.SaveExternalLinkValues: Boolean;
property IXLSWorkbook.UpdateLinks: TXLSExternalLinkUpdateMode;
property TXLSXWorkbook.SaveExternalLinkValues: Boolean;
property TXLSXWorkbook.UpdateLinks: TXLSExternalLinkUpdateMode;
      
兩個引擎預設皆會儲存快取值並使用 xluPromptUser; xluNever 與 xluAlways 只會變更儲存在 Workbook 中的更新偏好,絕不授權或啟動對外部檔案或網路的存取

計算稽核與 Workbook 提示

function TXLSWorkbook.RecalcAndVerify(MaxIssues: Integer = 10000): TXLSCalculationAuditReport;
function TXLSXWorkbook.RecalcAndVerify(MaxIssues: Integer = 10000): TXLSCalculationAuditReport;
function TXLSWorkbook.RecalcAndVerifyEx(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSXWorkbook.RecalcAndVerifyEx(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSWorkbook.RunCalculationAudit(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSWorkbook.FormulaIsVolatile(Formula: WideString): Boolean;

function TXLSWorkbook.AuditOverlayHash(SheetIndex, Row, Col: Integer): Integer;
function TXLSWorkbook.AuditOverlayRead(SheetIndex, Row, Col: Integer; var Value: Variant): Boolean;
procedure TXLSWorkbook.AuditOverlayWrite(SheetIndex, Row, Col: Integer; const Value: Variant);
procedure TXLSWorkbook.AuditOverlayClear;

TXLSCalculationAuditIssueKind = (xlcaiCacheMismatch, xlcaiParseFailure,
  xlcaiMissingFunction, xlcaiMissingName, xlcaiUnsupportedArguments,
  xlcaiCircularReference, xlcaiExternalReferenceDenied,
  xlcaiExternalReferenceMissing, xlcaiDataTableSkipped, xlcaiCancelled,
  xlcaiInternalFailure);

TXLSCalculationAuditIssue = record
  Kind: TXLSCalculationAuditIssueKind;
  SheetIndex: Integer;
  SheetName: WideString;
  Row: Integer;
  Col: Integer;
  Formula: WideString;
  Symbol: WideString;
  Expected: Variant;
  Actual: Variant;
  ResultCode: Integer;
  Stack: WideString;
  ExternalTarget: WideString;
end;
TXLSCalculationAuditIssues = array of TXLSCalculationAuditIssue;

TXLSRecalcAuditProgress = procedure(ASender: TObject;
  ACurrent, ATotal: Integer; var ACancel: Boolean) of object;

property WorkbookCodeName: WideString;
property CalculationThreadMode: TXLSCalculationThreadMode;
property ForceFullCalculationState: TXLSOptionalBooleanState;
property RefreshAllOnLoadState: TXLSOptionalBooleanState;
      
RecalcAndVerify 將公式符號失敗與快取值不符整理為穩定的結構化類別,附帶工作表座標、公式、符號、預期與實際值及受限截斷,同時不變更快取與 Workbook 語意; RecalcAndVerifyEx 執行深入稽核:它會經由相依性圖對每個公式評估一次,寫入隔離的結果覆蓋層,使相依儲存格讀取本輪結果而非過期快取,並以結果碼分類評估失敗(不支援的引數、循環參照、遭拒絕或缺失的外部參照、略過的資料表、取消、內部失敗),為每次失敗記錄受限的呼叫堆疊,遵守問題預算及進度或取消接收器;除非 ApplyResults 在未變更的 Workbook 結構上完全成功地跑完後以原子方式提交重算值,否則全程唯讀
AbsoluteTolerance 與 RelativeTolerance 管的是不相符回報,而不是中間計算值或明確的快取套用 就數值結果而言,判定不符需要絕對差超過 AbsoluteTolerance ,且在啟用相對容許誤差時超過 RelativeTolerance * max(abs(Expected), abs(Actual)) 達到任一門檻的相等都視為可容忍;變更後的值仍會進入稽核覆蓋層,讓相依公式看到目前的計算結果,即使差異達不到可回報的程度, ApplyResults 仍會提交這些值 唯讀稽核絕不會變更已儲存的快取
Each element of TXLSCalculationAuditReport.Issues 的每個元素都是 TXLSCalculationAuditIssue; Kind 選定 xlcai* 類別之一, Expected / Actual 攜帶快取不符時所比較的兩個值, Stack 是受限的評估呼叫鏈,呈現為 Sheet!A1 > Sheet!B2 (最外層框架在前), ExternalTarget 則描述外部參照問題所涉及的外部 Workbook。 TXLSRecalcAuditOptions.OnProgress 是 TXLSRecalcAuditProgress 接收器,會收到 ACurrent / ATotal 節點進度,並可設定 ACancel 在下一個節點邊界停止稽核,只留下一筆 xlcaiCancelled 問題
RunCalculationAudit 是 Workbook 層級稽核包裝所委派的引擎進入點,接受同一個選項記錄。 FormulaIsVolatile 回報某個公式是否會在每一輪都強制重算(例如呼叫 NOW、 RAND、 TODAY、 OFFSET、 INDIRECT,或含有無法解析的參照)
稽核覆蓋層是疊在儲存格快取之上的模擬分析層: AuditOverlayWrite 為單一儲存格儲存替代值(工作表索引以 1 為基數,列與欄以 0 為基數,與計算器慣例一致), AuditOverlayRead 與 AuditOverlayHash 查詢它, AuditOverlayClear 則清空整層。覆蓋的值會由一般的儲存格值 getter 傳回,因此重算與深入稽核都看得到它們,卻不會變更工作表儲存格;清除覆蓋層即可還原儲存的值
Workbook 提示屬性會在來源格式支援時保留缺失、false、true、停用、自動及手動狀態;開啟時絕不啟動計算、重新整理、檔案系統、網路或資料庫工作

表格公式與 IME 狀態

property TXLSXTable.ColumnCalculatedFormulaArrayStates[Index: Integer]: TXLSTableFormulaArrayState;
property TXLSXTable.ColumnTotalsFormulaArrayStates[Index: Integer]: TXLSTableFormulaArrayState;
property TDataValidation.ImeMode: TXLSDataValidationImeMode;
property TXLSXDataValidation.ImeModeKind: TXLSDataValidationImeMode;
      
計算欄與總計列公式各自保有獨立的缺失、false、true 或未知陣列狀態,包括未變動的來源詞彙值與欄結構編輯;純量列擴張會拒絕陣列公式,而不是悄悄變更它們
IME 模式使用明確的 BIFF 與 OOXML 對映,保留未知的來源值,並在為 Classic XLS 撰寫時拒絕僅限 OOXML 的停用值
將 SaveExternalLinkValues 設為 False 時,會省略 Classic XCT 與 CRN 記錄,或 XLSX 外部活頁簿的 sheetDataSet 子樹,但仍保留連結目標、工作表名稱、外部定義名稱、關聯、公式參照、未知 XML 與記憶體內快取;在同一 Workbook 上將屬性還原為 True ,可再次序列化該保留快取
未接觸的不支援來源 Token 會逐位元組或以詞彙形式保留,明確指派只會輸出合法值,未變更的 XLSX 部件維持壓縮複製路徑,而 XLS/XLSX 轉換會傳遞兩種原則;ODS 與文字 Workbook 沒有等效宣告,會以預設值開啟,保留的 DDE 與 OLE 連結部件則不會被視為外部 Workbook 儲存格快取

Web Add-in 工作窗格檢查與移除

function IXLSWorkbook.HasWebAddinTaskPanes: Boolean;
function IXLSWorkbook.WebAddinTaskPaneCount: Integer;
function IXLSWorkbook.RemoveWebAddinTaskPanes: Integer;
function TXLSXWorkbook.HasWebAddinTaskPanes: Boolean;
function TXLSXWorkbook.WebAddinTaskPaneCount: Integer;
function TXLSXWorkbook.RemoveWebAddinTaskPanes: Integer;
      
檢查方法只會辨識類型完全符合 Web Add-in 工作窗格關聯類型的內部套件根關聯;外部關聯、大小寫不同的類型、工作表關聯與名稱相近的部件都會被忽略
移除會先驗證完整關聯圖,包含正規化目標、套件根範圍限制、迴圈、缺失部件及資源限制;接著移除所有相符的根關聯,以及未與其他保留關聯共用的可達部件,連同由已刪除來源擁有的關聯部件
此作業具原子性與冪等性,已移除的來源部件無法透過壓縮複製儲存重新出現,內容類型會依剩餘套件重新建立;格式不正的圖會新增診斷碼 1303 並在變更前擲出例外,而 Classic XLS 與 ODS 不進行套件掃描,分別傳回 False、 0與 -1 without package scanning

Workbook 物件顯示原則

TXLSObjectDisplayMode = (xlsodmShowAll, xlsodmShowPlaceholders,
  xlsodmHideAll);

property IXLSWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSXWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSPaginationModel.ExportObjectPlaceholders: Boolean;
property TXLSPDFExport.ExportObjectPlaceholders: Boolean;
property TXLSSvgExport.ExportObjectPlaceholders: Boolean;
property TXLSPageImageExporter.ExportObjectPlaceholders: Boolean;
property TXLSPrintDocument.ExportObjectPlaceholders: Boolean;
property TXLSXHtmlExportOptions.ExportObjectPlaceholders: Boolean;
      
Classic XLS 會將三種狀態對映到其 Workbook 物件顯示記錄,XLSX 則對映至 workbookPr.showObjects;缺失值預設為 xlsodmShowAll,未接觸的保留 Classic 承載資料與不支援的 XLSX Token 保持無損,而明確指派只輸出標準值
檢視器將預留位置模式轉譯為輕量方塊,帶有可用的物件類型、名稱、文字與替代文字;匯出器預設保留完整物件,設定 ExportObjectPlaceholders 則要求相同的低成本原則,無須解碼影像承載資料或建構圖表場景
xlsodmHideAll 會在轉譯開始前阻止收集繪圖與由物件驅動的範圍擴張;Workbook 轉換會帶入全部三種狀態,ODS 在預留位置模式寫入完整繪圖、在全部隱藏模式省略繪圖與媒體輸出,而工作表背景仍各自獨立

轉譯校正值與快照

TXLSRenderCalibration = record
  WidthCorrection: Double;
  HeightCorrection: Double;
  LineSpacing: Double;
  CellMarginFactor: Double;
  ScreenScaling: Integer;
  MeasurementDpi: Integer;
end;

function XLSDefaultRenderCalibration: TXLSRenderCalibration;
function XLSValidateRenderCalibration(const AValue: TXLSRenderCalibration;
  out AInvalidField: TXLSRenderCalibrationField): Boolean;
      
預設值依序為 1、 1、 1、 1、 100與 96;寬度與高度校正必須大於零且小於二,行距限制為 (0, 4]、儲存格邊界為 [0, 4]、螢幕縮放為 [100, 500] percent,而測量 DPI 為 [36, 2400]
Classic XLS 與 XLSX Workbook 都公開相同的 RenderCalibration、 CaptureRenderCalibration與 ResetRenderCalibration 成員;整筆記錄指派會在變更前驗證,每次擷取都為一次轉譯作業傳回獨立且依慣例不可變的值快照

轉譯幾何與字型測量

TXLSRenderGeometryBackend = (xlsrgbAutoFit, xlsrgbPagination, xlsrgbPdf,
  xlsrgbSvg, xlsrgbBitmap, xlsrgbPrintPreview, xlsrgbViewer, xlsrgbHtml);

TXLSRenderFont = record
  Name: WideString;
  Size: Double;
  Styles: TXLSRenderFontStyles;
  Charset: Byte;
end;

function CreateXLSRenderGeometry(
  const ACalibration: TXLSRenderCalibration;
  AWorkbookGeneration: UInt64;
  ABackend: TXLSRenderGeometryBackend;
  ACacheCapacity: Integer = 4096): IXLSRenderGeometry;

property TXLSHTMLExport.RenderGeometry: IXLSRenderGeometry;
property TXLSXHtmlExportSession.RenderGeometry: IXLSRenderGeometry;
      
IXLSRenderGeometry 擁有一份不可變的校正值、Workbook 世代、後端識別、測量服務及受限的作業本地度量快取; CreateXLSRenderGeometry 使用 GDI,而 lxPortableCairo 中的 CreateXLSPortableCairoRenderGeometry 在原生 Linux 或 macOS 上使用明確的字型位元組搭配 FreeType/HarfBuzz; MeasureText 傳回像素寬度、高度、行高、上升部、下降部與行數,而 MaximumDigitWidthPixels、 ColumnWidthToPixels、 PixelsToColumnWidth、 PointsToPixels、 PixelsToPoints與 UsableCellWidthPixels 提供共用幾何換算
快取識別包含後端、Workbook 世代、所有校正值、字型名稱、精確大小、樣式、字元集、換行寬度與文字;寬高校正只會在文字測量時套用一次,行距只影響多行高度,儲存格邊界校正只影響可用文字寬度,螢幕縮放只影響隱含欄寬的最大數字寬度模擬
Classic XLS 與 XLSX AutoFit 會為每個公開作業擷取一個服務,包括合併範圍與兩階段 MarkSheet 測量,而 TXLSPaginationModel.Build 為選取的 RenderBackend擷取一個服務;PDF、SVG、點陣圖、列印預覽、Workbook 檢視器與 HTML 進入點會在輸出前選擇自己的後端,變更 Workbook 校正值無法改變既有快照,且輸出不會寫入工作表尺寸
直接 HTML Workbook、工作表及範圍呼叫會擷取新的 xlsrgbHtml 服務,而增量 TXLSXHtmlExportSession 只在 BeginExport 擷取一次,並為所有工作表重用該快照;兩個匯出器皆透過 RenderGeometry 公開保留的服務,以供校正與快取診斷
唯讀 IXLSRenderGeometry 屬性 WorkbookGeneration、 CacheCapacity與 CacheEntryCount 會為診斷回報繫結世代與快取填入量,而 ImplicitWidthMaximumDigitWidthPixels 傳回隱含欄寬模擬使用的數字寬度測量值
MeasureText 會依 TXLSRenderTextMetrics 填入一筆 TXLSRenderFont 記錄(像素寬度、高度、行高、上升部、下降部與行數),該字型的 Styles 成員是 TXLSRenderFontStyle 旗標的集合(粗體、斜體、底線、刪除線)

匯入、程式碼產生、比較與監控

TXLSHTMLImportLoadFromHTML 多載可將資料流或檔案中的 HTML 表格內容匯入工作表,並可選擇起始座標、表格及小數點分隔符號
TXLSCodeGenLanguage (型別為 TlxCodeGenLanguage: lcgDelphi 或 lcgCppBuilder)選擇所產生陳述式的來源語言方言, GenerateToList 將產生的 Workbook 程式碼寫入字串清單, TlxCodeGenOptions 則可讓輸出額外涵蓋合併儲存格、欄寬或數字格式(cgoMerges、 cgoColumnWidths、 cgoNumberFormats;工作表與儲存格一律會輸出)
TXLSXWorkbookCompareCompare 比較具型別的已儲存儲存格、公式文字、工作表存在性與合併儲存格; Options 可追加公式快取、基礎儲存格樣式與列或欄幾何, SetNumericTolerance 設定數值相等條件, Count、 Diff與 Report 公開排序後的結果;請見活頁簿比較
TXLSFileMonitorIntervalMs 選擇輪詢間隔,而 SynchronizeEvent 選擇同步回呼傳遞; OnFileChanged 處理常式可以停用或銷毀監視器,也可以變更 FileName 改監看另一個檔案
TXLSCSVLoader and TXLSCSVSaver載入器會把分隔文字解析成記憶體內的 Variant 格線—— ParseFile 與 ParseStream 填入格線, CellValue、 RowCount與 ColCount 讀回內容——分隔符號(ValueSeparator)與編碼(TXLSCsvEncoding:系統 ANSI、UTF-16、UTF-8)會自動偵測,型別提升則由 DetectTypes 與逐欄的 ColumnTypes 項目(TXLSCsvColumnType:自動、文字、數字、日期、布林、略過)控制; SkipRows、 AutoTrim、 LocaleTolerantNumbers與 FieldWidths 進一步調整固定寬度與地區設定的處理。 TXLSCSVSaver.SaveAs 以 RFC 4180 引號規則把格線寫回, QuoteAllStrings 強制全部加引號; TXLSTSVSaver 衍生自該儲存器,用於 Tab 分隔輸出

活頁簿比較

lxCompare 中的 TXLSXWorkbookCompare 會比較兩個 TXLSXWorkbook 執行個體,不重新計算公式也不修改任一活頁簿;工作表以不分大小寫的名稱配對,僅改變工作表順序不會產生差異

預設的 Options 是空集合,兩個容許誤差預設為零;預設比較回報新增或移除的工作表、新增或移除的已儲存儲存格、變更的具型別常值、變更的公式文字,以及新增或移除的合併範圍

常值比較區分數字、文字、Boolean、日期、錯誤與空白:數字 1 與文字 '1' 不同,Boolean 與其文字拼寫不同,日期保留自己的型別,錯誤則以已儲存的錯誤碼比較;值相等的數字儲存型別視為相等,而相異的 Int64 值在精確比較下仍相異

lcoFormulaCachedResults對公式文字相符的儲存格,比較既有的快取結果,並區分缺漏或失效的快取與可用的快取;具相同具型別值的載入快取與計算快取視為相等
lcoCellStyles在相符的已儲存儲存格座標上比較解析後的基礎樣式,包括字型、填滿、漸層、框線、對齊、數字格式與儲存格保護;無關的樣式集區插入順序不會產生差異,佈景主題色彩則依各自活頁簿目前的佈景主題解析
lcoAxisGeometry比較有效的列高、欄寬、隱藏旗標、大綱層級、摺疊旗標與工作表預設值;與有效預設值相等的明確尺寸,和隱含尺寸視為相等
lcoDefinedNames比較活頁簿與工作表範圍的名稱及其公式定義、可見性、註解與巨集旗標;範圍依工作表名稱決定,插入順序不會產生差異
lcoDataValidations依儲存順序比較驗證定義,包括正規化後的目標範圍、公式、運算子、提示、錯誤訊息與控制旗標;同一個定義內目標範圍順序的改變不會產生差異
lcoConditionalFormats依儲存順序比較條件式格式定義,包括有效優先順序、符合即停止行為、目標範圍、公式、差異樣式,以及支援的色階、資料橫條與圖示集設定;樣式集區與索引調色盤識別碼會解析成語意值
lcoTables依名稱配對資料表並比較範圍、標題、總計、樣式設定、註解、欄名、標籤、公式、陣列旗標、唯一名稱、連線名稱、篩選準則與排序條件;資料表 ID、欄 ID 與插入順序不會產生差異,而色彩篩選與排序的差異樣式 ID 會解析成外觀
lcoDrawings依繪製順序比較具型別繪圖定義,保留群組子項順序與圖表繪圖群組順序;支援的標準定義涵蓋圖片、文字方塊、圖表、群組、完整的具型別 Slicer 檢視與具型別 Timeline 檢視,而不透明或不受支援的繪圖節點會引發 EXLSSemanticSnapshot
lcoBlankStyleRegions比較兩側皆無已儲存儲存格之座標上解析後的基礎樣式,包括工作表預設值與虛擬樣式覆蓋;等效的矩形細分視為相等,相等的相鄰變更會合併成矩形而不具現化儲存格
lcoRichTextRuns在相符的已儲存文字儲存格上比較有效的 run 字型與文字,省略的 run 屬性繼承基礎字型,忽略空的 run,並合併有效字型相等的相鄰 run;純文字與等效的預設字型 rich-text run 視為相符
lcoPivotTables依名稱配對具型別的 PivotTable 定義,並比較來源繫結、版面、欄位、有序的檢視成員、資料彙總、篩選、群組參照、計算定義、樣式與原生具現化旗標;快取與共用成員 ID 會解析成來源身分與具型別值
lcoPivotCaches依來源身分配對本機具型別的 PivotCache 定義,並比較重新整理中繼資料、欄位中繼資料、群組標籤與範圍、無序的共用成員定義域,以及有序的具型別記錄值;數字、文字、Boolean、日期、錯誤與空白成員保持區別,日期保留 binary64 精度,快取 ID 與共用成員槽位順序不會產生差異
lcoSlicerState依名稱配對 Slicer 檢視與快取,包括資料表欄或非 OLAP 樞紐繫結、連接的 PivotTable 名稱、具型別成員選取、交叉篩選與排序設定、標題、捲動位置、欄版面、尺寸、樣式、鎖定與標題旗標,以及錨定幾何;繫結會解析資料表、欄、工作表與快取 ID
lcoTimelineState依名稱配對具型別的 Timeline 檢視與本機非 OLAP 快取,包括來源欄位與連接的 PivotTable 繫結、作用中的日期選取、標題、層級與工作表界限;非作用中的選取會省略未使用的日期端點

Options 的型別是 TlxCompareOptions ,即 TlxCompareOption 的集合;啟用某個選項會把其差異加到預設比較中

SetFeatureLimits(MaxBytes, MaxItems) 會在變更任一設定前驗證兩個正值限制; MaxFeatureBytes 預設 64 MiB, MaxFeatureItems 預設 1,000,000,個別 setter 保留相同的原子驗證

功能預算涵蓋來自兩份活頁簿的彙總分離標準位元組與計數項目,包括 rich-text run、篩選 XML 節點、樞紐欄位、定義域成員與記錄值,以及 Slicer 或 Timeline 連接;讀取器會在建構原生 XML 前檢查計數與大型文字輸入,強制輸出串流有界,超過限制時引發 EXLSXSemanticBudget

SetNumericTolerance(AbsoluteTolerance, RelativeTolerance) 會在變更任一設定前驗證兩個引數;兩者必須為有限且非負,個別的 AbsoluteTolerance 與 RelativeTolerance setter 使用相同的驗證

當數值常值與數值快取值的絕對差異不超過 AbsoluteTolerance ,或相對較大絕對值的差異不超過 RelativeTolerance 時,兩者視為相等;閾值為零保留精確相等,相對計算可避免極端反向值的溢位,容許誤差不會強制轉換文字,也不套用到日期、樣式或幾何

LeftName 與 RightName 設定 Report 行所用的選用顯示名稱,預設為 left 與 right;這些名稱只影響報告,不影響工作表配對或比較

Comparer := TXLSXWorkbookCompare.Create;
try
  Comparer.Options := [lcoFormulaCachedResults, lcoCellStyles,
    lcoAxisGeometry];
  Comparer.SetNumericTolerance(0.001, 0.000001);
  DifferenceCount := Comparer.Compare(LeftWorkbook, RightWorkbook);
  for I := 0 to DifferenceCount - 1 do
  begin
    Entry := Comparer.Diff(I);
    ReportLines.Add(Entry.Describe);
  end;
finally
  Comparer.Free;
end;

Compare 回傳差異數, Count 事後讀取該數量, Diff(Index) 以 0 為基數索引回傳比較器自有的 TlxCompareDiff;讀取項目期間請保留比較器,另一次成功比較後需重新取得項目

每個項目提供 Kind、 Sheet、適用時以 1 為基數的 Row 與 Col、 Ref、 LeftText、 RightText ,以及具型別的 LeftKind / RightKind 值; TlxCompareValueKind 包含 lcvNone、 lcvBlank、 lcvNumber、 lcvText、 lcvBoolean、 lcvDateTime、 lcvError與 lcvFormula , lcvNone 用於缺漏的一側或非值差異

TlxCompareKind 保留 lckSheetAdded、 lckSheetRemoved、 lckCellAdded、 lckCellRemoved、 lckValueChanged、 lckFormulaChanged、 lckMergeAdded與 lckMergeRemoved ,並新增 lckFormulaCacheChanged、 lckStyleChanged、 lckRowGeometryChanged與 lckColumnGeometryChanged

樣式差異在 LeftText 與 RightText 攜帶穩定的標準樣式指紋;幾何差異攜帶比較過的尺寸、隱藏、大綱與摺疊狀態, Ref 識別受影響的連續座標軸區間,列的 Row 設為其第一列且 Col 為零,欄的 Col 設為其第一欄且 Row 為零

功能差異使用 lckDefinedNameChanged、 lckDataValidationChanged、 lckConditionalFormatChanged、 lckTableChanged、 lckDrawingChanged、 lckPivotTableChanged、 lckPivotCacheChanged、 lckSlicerChanged或 lckTimelineChanged; Change 為 lccChanged、 lccAdded或 lccRemoved ,存在的一側攜帶其標準定義指紋,缺漏的一側則是空字串

lckRichTextChanged 在其儲存格座標上識別變更的 run 定義,並在 LeftText 與 RightText 攜帶標準 run 指紋;數值容許誤差套用於儲存格常值與公式快取,具型別功能定義則精確比較

功能參照識別範圍名稱或資料表名稱,或對驗證、條件式格式與繪圖定義使用以 1 為基數的序列位置;插入或移動有序功能可能改變多個位置,活頁簿層級名稱項目的 Sheet 則為空

lckBlankStyleRegionChanged 透過 Row、 Col、包含端的 LastRow 與 LastCol 及其 A1 Ref 識別變更的空白矩形;已儲存座標由一般儲存格比較與 lcoCellStyles 處理,因此請同時啟用兩個樣式選項一併檢查已儲存儲存格與空白區域

Describe 格式化單一項目, Report(List) 把格式化後的項目附加到呼叫端自有的 TStrings;型別不同時,具型別值變更會附上型別標籤,結果則依工作表名稱、列、欄、差異種類與參照排序,而非依儲存格插入順序

比較持有讀取租約,透過分離的游標快照走訪已儲存儲存格,並保留壓縮儲存體;幾何會分割已儲存的中繼資料邊界與緊湊的重複列跨度,空白樣式比較則掃過作用矩形與已儲存儲存格邊界,而不掃描百萬列的矩形網格;工作量隨已儲存功能、區域交集與回報的差異成長

失敗的比較保留先前成功的結果;無效的容許誤差指派也保留既有設定與結果,而傳入 nil 活頁簿會清除結果並回傳零

這個比較涵蓋 XLSX 門面的已儲存儲存格內容與選定的具型別功能定義;名稱、驗證、條件式格式、資料表與圖表公式的拼寫會透過語意公式剖析器正規化,樞紐計算公式則保留其已儲存的定義文字

資料表篩選接受支援的自訂、值清單、日期群組、色彩、圖示、動態與前 N 名形狀及排序條件;獨立的篩選欄與值集項目會正規化其順序,Boolean 預設值與數字拼寫會正規化,排序條件的順序仍然重要

具型別的樞紐、Slicer 與 Timeline 比較會解析支援的本機工作表來源與非 OLAP 繫結,不重新整理也不評估可用性;原生 Slicer 可用性提示是衍生的顯示中繼資料,而成員選取與可辨識的原生排序中繼資料會被比較

不透明的原生繪圖屬性、不完整的二進位樞紐模型、外部或 OLAP 樞紐來源、原始 PivotTable 補充記錄與延伸 XML、未知篩選 XML,以及未建模的 Slicer 或 Timeline 延伸屬性或子節點會引發 EXLSSemanticSnapshot;保留這類資料並不代表語意等效

選定的已匯入 PivotTable 與 PivotCache 功能也會在比較具型別投影前驗證保留的原生 XML,包括巢狀欄位中繼資料與快取記錄;未知的命名空間、屬性、子節點與延伸承載會在同樣的合作式功能限制內明確失敗,而已建模的 Slicer 快取繫結仍受支援

TSimpleDomNode.RawName 在讀取器正規化的 Name 之外公開原始元素 QName,允許對命名空間敏感的檢查而不改變既有的剖析器名稱比對

活頁簿設定與不透明的套件中繼資料不在比較範圍內;基礎樣式比較不評估條件式格式或表格樣式外觀,繪圖比較則保留語意快照支援的圖片、文字方塊、圖表與有序群組界限

有效的 Rich Text 屬性

TMsoFbtOpt.StoredPids 以排序後的順序回傳已儲存的 OfficeArt 屬性識別碼, TMsoFbtSp.PersistentFlags 則公開原生圖形旗標而不配置屬性或錨點

TMsoShapeContainer.HasPreservedObjectData 識別保留的 OBJ 尾端位元組; HasOrdinaryEmbeddedPictureObjectData 檢查圖片尾端只包含可辨識的剪貼簿格式與零值圖片旗標記錄,並在不複製承載資料的情況下拒絕連結或未知記錄

TMSOShapeTextBox.HasValidTextRuns 檢查已儲存的 TXO run 邊界與保留欄位而不建立 run; TMsoDrawing.HasUnmodeledAppearance 識別被具型別剖析器略過的原生繪圖資料,讓擷取可以明確拒絕未解析的外觀

TXLSXRichTextRun.BoldSet、 ItalicSet、 StrikethroughSet、 UnderlineSet、 VertAlignSet與 ColorSet 區分繼承的字型屬性與明確覆寫,包括 false 旗標、none、baseline 與自動色彩;即使值等於新 run 的初始預設,setter 仍會把該屬性標記為明確

TXLSXRichText.HasUnsupportedAppearance 回報具型別 run 模型無法表示的原生 rich 屬性;可攜式擷取與有效 rich-text 比較會明確拒絕這類 run,而受支援的共用/內嵌 run 屬性與空白字元保留其匯入語意

有效 rich-text 比較會在合併相鄰相等 run 之前先套用明確的 false 覆寫;在共用字串去重與受支援的 XML 往返中,繼承與明確清除的屬性保持區別

TXMLReader.ResolveNamespaceUri(Prefix, Uri) 解析目前範圍內的命名空間繫結而不改變讀取器位置,無繫結時回傳 false;空前綴請求預設命名空間,原始 QName 仍可用於對命名空間敏感的檢查

不可變的 rich/scene 記錄、擷取來源延伸與 HXRSNP02 傳輸合約描述於可攜式無頭輸出

分離的樣式與座標軸檢查

TXLSXWorksheet.ReadSemanticCellStyle(Row, Col) 針對有效的以 1 為基數座標回傳分離的 TXLSSemanticCellStyle ,解析已儲存與壓縮樣式、工作表預設值、適用的樣式覆蓋、隱含日期格式、索引色與佈景主題色彩,不具現化儲存格也不變更樣式集區;公開呼叫會取得讀取租約,並排除條件式格式與表格樣式規則

TXLSXWorksheet.GetStoredAxisSpans(IsRow) 回傳 TXLSXAxisSpans ,即 TXLSXAxisSpan 記錄陣列,含包含端以 1 為基數的 FirstIndex 與 LastIndex;它回報尺寸、隱藏、大綱與摺疊中繼資料足跡,保留緊湊的重複列高跨度,工作表的有效預設值仍可透過一般屬性取得

回傳的跨度描述的是已儲存的中繼資料足跡,而非互斥的正規化分割;比較兩個座標軸的應用程式可以先合併雙方的首尾邊界,再對每個結果區間檢查一次有效狀態

TXLSXWorksheet.GetStoredStyleRegions 回傳分離的 TXLSXStyleRegions ,為緊湊的虛擬格式化足跡包含 FirstRow、 FirstCol、 LastRow與 LastCol 界限;這些足跡可能重疊,呼叫端以 ReadSemanticCellStyle 讀取其有效外觀

TXLSXWorkbook.ReadSemanticFeatures(Kind, Sheet, MaxBytes, MaxItems) 回傳分離的 TXLSXSemanticFeatures 項目,含穩定的 Key、標準的 Definition 位元組與計數的 ItemCount;選用的正值限制預設為 64 MiB 與 1,000,000 個項目

TXLSXSemanticFeatureKind 包含 xlsxSemanticDefinedNames、 xlsxSemanticDataValidations、 xlsxSemanticConditionalFormats、 xlsxSemanticTables、 xlsxSemanticDrawings、 xlsxSemanticPivotTables、 xlsxSemanticPivotCaches、 xlsxSemanticSlicers、 xlsxSemanticSlicerCaches、 xlsxSemanticTimelines與 xlsxSemanticTimelineCaches

定義名稱與三種快取使用活頁簿整體範圍並允許 nil 工作表;其他種類要求屬於該活頁簿的工作表,規則與繪圖保留其已儲存順序,回傳的陣列與緩衝區是呼叫端自有的副本;這些讀取器取得讀取租約,並繼承上述的具型別涵蓋範圍與明確不支援資料行為

TXLSXWorksheet.ReadSemanticRichText(Row, Col, IncludePlainText, MaxBytes, MaxItems, ConsumedItems) 針對以 1 為基數座標回傳分離的標準 run 位元組,當無 rich text 且 IncludePlainText 為 false 時回傳空緩衝區;選用的 ConsumedItems: PInteger 接收擷取的 run 數,純文字擷取保留壓縮儲存體

TXLSPivotCacheField.GroupItemTypes[Index] 公開對應 GroupItemLabels[Index] 的具型別種類,並拒絕超出已儲存群組標籤定義域的索引

公式中繼資料與 Pivot 查詢回呼

TXLSGetCellFormulaText 與 TXLSCalculator.OnGetCellFormulaText 以 1 為基數的 SheetIndex 與 0 為基數的 Row/Col 讀取已儲存的運算式文字,回傳 lxOk 或具型別錯誤碼,並遵守公式隱藏保護; TXLSGetPivotTable 與 OnGetPivotTable 以 1 為基數的 SheetIndex 與 0 為基數的範圍座標找到借用的資料表

活頁簿引擎會在一般、唯讀與隔離計算內容中接上這些選用回呼;回呼不重新計算目標、不重新整理樞紐來源,也不轉移所有權

TXLSPivotDataConstraint 儲存 FieldName 與具型別 Item , TXLSPivotDataConstraints 收集欄位/項目配對; TXLSPivotTable.GetDataValue 從分離的本機資料表/快取快照查詢一個可見的受支援彙總, IntersectsQueryRange 則使用以 1 為基數的工作表界限,包括已建模的報表篩選儲存格

TlxPivotQueryBudget 同步接收工作與記憶體估計並回傳評估是否可繼續; EXLSPivotQueryBudget 與 EXLSPivotQueryUnsupported 區分耗盡的限制與不受支援的快取或彙總模型

TXLSPivotCache.QueryModelIsComplete 獨立於 BIFF 原始重播完整性記錄已解碼的查詢就緒狀態; QueryRecordsValid 公開匯入記錄的有效性, SetQueryRecordValidity 套用格式讀取器優先權而不重新整理記錄

明確字碼頁位元組

成員契約
XlsEncodeCodePage(Text, CodePage, MaxBytes = -1)回傳 RawByteString ,以明確非零的位元組導向字碼頁編碼精確位元組,保留內嵌 null,驗證 Unicode 往返一致性,對無法表示的文字引發 EConvertError;非負的 MaxBytes 保留裝得下的最長完整字元前綴, -1 則不限制長度;驗證在截斷之前先涵蓋原始文字
XlsDecodeCodePage(Bytes, CodePage)從明確的位元組編碼回傳 WideString 並保留內嵌 null;格式錯誤的位元組序列遵循已安裝解碼器的行為;字碼頁 0 與 UTF-16 字碼頁 1200 會被拒絕,因為此 API 不推測 ANSI 地區設定,也不處理 UTF-16 位元組流
TXLSBlob.GetCompressedUnicodeString(Index, Count)回傳精確的 BIFF8 壓縮 Unicode U+0000 到 U+00FF code unit,保留內嵌 null,驗證要求的位元組範圍,且不使用字碼頁解讀那些位元組
TXLSBlob.AddRawString附加精確編碼的位元組而不做 AnsiString 字碼頁轉換,並更新 DataLength;空輸入不附加任何位元組
TXLSCalculator.CodePage, TXLSFormula.FCodePage選擇明確的舊版公式位元組編碼,預設 CP1252;擁有它的 Classic 活頁簿會在初始化或呼叫 SetCodePage 時同步其計算器
TXLSFontList.GetFont, TXLSNumFormatList.GetNumFormatBlob, TXLSStyles.GetStyleBlob選用的 CodePage 引數預設 1252 並編碼 BIFF5 文字; BIFF8 輸出維持 Unicode
TMsoDrawing.StoreNotes選用的 CodePage 引數預設 1252 並編碼 Unicode 之前的註解文字;既有的 BIFF5 一般註解記錄大小限制不變;這不會新增該記錄格式所沒有的作者、rich-text 或幾何欄位
TXLSCustomName.SetSourceData選用的 FileFormat 與 CodePage 引數識別匯入的原始 NAME 位元組,預設 xlExcel97 與 1252;只有當其格式與舊版編碼符合要求的輸出時,原始記錄才會被重用
TXLSFormulatArrayItem.GetDataSize, TXLSFormulatArray.GetDataSize, TXLSFormulatArray.GetData, TXLSFormulatArrays.GetDataSize, TXLSFormulatArrays.GetData, TXLSCompiledFormula.GetExternalData選用的 ACodePage 引數預設 1252;舊版字串陣列的大小與輸出使用相同的編碼位元組數, BIFF8 字串維持 Unicode

把回傳的 RawByteString 直接傳給 AddRawString 或位元組導向的串流操作;在原生 FPC 系統上把它轉成預設 AnsiString 可能重新編碼其位元組

Classic 定義名稱與陣列公式區塊

TXLSCustomName deferred compilationClearDefinition 釋放已編譯的 RefersTo AST 但保留已儲存的定義字串與任何匯入的原始 NAME 位元組, Compile 從已儲存的定義重建 AST 並回報成功, GetCompiledFormula 則自動重新編譯,因此被清除的名稱會在下一次讀取時重新解析; PeekCompiledFormula 回傳目前的 AST 而不觸發重新編譯, StoredDefinition 公開未剖析的定義來源
TXLSCustomName identity and flagsStoreIndex 公開名稱在其集合中的儲存位置, NameID 公開計算引擎使用的活頁簿唯一數值身分, IsHidden 與 IsMacro 讀寫 BIFF NAME 記錄的隱藏與巨集旗標
TXLSFormulatArray.RowsCount, ColsCount回報已解析陣列公式區塊的列與欄範圍;兩者從 1 起算,並界定輸出方法攜帶的逐儲存格項目定義域

Classic 字型、格式與樣式集區

TXLSFontList stored font attributes索引屬性鏡射零基清單索引上的已儲存字型鍵值: Name、 Size、 ColorIndex、 Bold、 Italic、 Strikethrough與 Underline 加上 OutLineFont、 Shadow、 SubScript、 SuperScript、 Family與 CharSet 供唯讀檢查
TXLSNumFormatList.AddValue, FmtExistsAddValue 註冊格式字串並回傳其索引,把內建格式拼寫對應到標準 id 並標記日期與時間格式; FmtExists 回報自訂格式字串是否已註冊
TXLSNumFormatList.IsDateFormat, IsDateFormatValueIsDateFormat 回報索引處儲存的格式是否被標記為日期或時間格式, IsDateFormatValue 則直接測試格式字串是否含日期與時間 token
TXLSStyles.AddStyle, AddBuiltinStyleAddStyle 註冊繫結到 XF 記錄索引的具名自訂儲存格樣式, AddBuiltinStyle 依內建 id 註冊內建儲存格樣式,並附上列與欄層級樣式所用的大綱層級
TXLSStyles.BuiltinStyleName類別函式,回傳內建 id 0 到 53 的標準 Excel 內建儲存格樣式顯示名稱;超出範圍的 id 回傳空名稱,讓寫入器改用原始內建位元組形式

套件與二進位儲存輔助工具

TXLSXOpaquePackageLoadWorkbookXmlMetadata 擷取 Workbook 層級的 XML 狀態, MarkAllPartsClean 重設變更旗標,而 WorkbookExtLstXml 與 WorkbookRootAttributesXml 公開保留的 Workbook XML 片段; IsDiscardedPart 回報部件名稱是否因 Web Add-in 清理等捨棄作業而被移除
TXLSFileStorageLoad、 LoadFolder、 Write與 WriteFolder 傳送複合檔案內容; Child 與 Count 列舉子項目,每個子項目都是 TXLSFileItem ——具名的儲存節點,其 TXLSFileStream 子類別以 TXLSBlob 攜帶儲存的位元組, DataSize 則回報承載資料長度
TXLSBlobAdd 附加另一個 Blob,而 AddByte、 AddWord、 AddLong、 AddDouble、 AddString與 AddWideString 附加具型別的值; CopyData、 CopyMem、 FillByte、 Write、 Clear、 Reset與 Dump 管理內容; Buff 與 DataLength 公開儲存體
TXLSBlobListAppend、 AppendList、 CopyData與 Write 合併或輸出項目; Entries 與 TotalSize 公開清單狀態
TXLSWideStringBuilderAddString 附加文字,而 Length 回報累積字元數

繪圖與 Workbook 檢視器增補功能

TXLSFillFormatPictureFill 設定以圖片為基礎的圖形填滿,而 FillType 選擇寫入器輸出的填滿種類(實心、漸層、圖片或預設材質)
TXLSShapesAddScrollBar 與 AddSpinner 建立表單控制項——傳回的 TXLSScrollBar 與 TXLSSpinner 物件公開控制項幾何與連結儲存格,微調按鈕另外提供 Min、 Max與 Inc 步進限制——而 RegisterScrollBar 與 RegisterSpinner 註冊自 Workbook 載入的控制項
TXLSWorkbookViewerCanUndo 與 CanRedo 回報交易歷程的可用性; ClearSelectedRange、 CopySelectedRange、 PasteSelectedRange與 PasteText 作用於選取範圍, ReferencePickMode 則啟用互動式儲存格或範圍參照選取
TXLSWorkbookEditHistorylxWorkbookViewer 中的無頭內容交易引擎繫結借用的 Classic 或 XLSX 活頁簿,提供範圍保護預檢、Unicode 文字複製與複製與貼上、範圍清除,以及每個操作一筆復原/重做交易;請見無頭編輯交易
TXLSCellContentSnapshot兩個工作表類別都公開 ReadCellContent(Row, Col) 與 RestoreCellContent(Snapshot) ,在原始工作表中以 1 為基數座標做分離的原生內容擷取與還原;擷取不計算公式、不建立不存在的儲存格,也不具現化壓縮儲存體,不可變的 NativeData 承載保留 rich text、公式快取與儲存格樣式;直接還原是低階操作,呼叫端必須自行驗證保護與結構邊界

分頁、影像輸出與列印

XLSValidateCachedChartSceneModel, XLSRecordCachedChartScene在不解析儲存格的情況下預檢快取圖表中繼資料,並為 lxPortableChart 中的分離圖表記錄有界的向量與文字基本元素,回傳 TXLSPortableSceneObjects 與項目、位元組及文字計數; lxPagination 進入點對既有 Windows 呼叫端保留相同的共用實作;目前的子集涵蓋普通直條、橫條、折線、散佈、圓形、環圈與單數列區域圖,且只有一個主要繪圖群組,記錄需要已驗證的原生中繼資料、有限且嚴格有序的快取點,以及未附加的圖表模型;請見快取圖表記錄
TXLSGraphicsBackendDrawTiledImage 在經裁切的頁面區域中重複繪製工作表背景
TXLSPaginationModelCompactRangeMode、 IncludeDrawings、 IncludeGridlines、 IncludeCellBorders與 PaintPageBackground 控制頁面內容; RenderDPI、 RenderColorMode與 RenderSession 公開輸出解析度、色彩處理及作用中的轉譯工作階段
TXLSCellImageExporterMeasure 計算 Classic 或 XLSX 範圍的像素尺寸; ImageFormat、 JpegQuality、 MaxPixels、 MaxBytes、 IncludeObjects、 IncludeGridlines、 IncludeCellBorders、 BackgroundColor、 TransparentBackground、 BeforePaint、 AfterPaint與 PaginationModel 設定及觀察轉譯
TXLSPageImageExporterBeforePaint、 AfterPaint、 MaxPixels、 MaxBytes、 BackgroundColor與 TransparentBackground 將相同繪製掛鉤與輸出安全限制套用至分頁影像匯出
TXLSPrintDocumentPrintWorksheet、 PrintWorkbook與 PrintAllVisibleSheets 將 Classic 或 XLSX 內容傳送至 VCL 印表機; FirstPage、 PrintRangeOnly、 Collate、 Copies、 OnBeforeNewPage與 OnAfterGeneratePage 控制列印工作

Classic 圖表模型與工作表圖表物件

TXLSXChartSeriesLineVisible、 LineColorRGB與 LineWidthPoints 描述數列的獨立線條描邊; LineStyleSet、 LineColorSet與 LineWidthSet 保留明確設定, EffectiveLineVisible 則解析舊版只以填滿表示的慣例; MarkerFillSet 與 MarkerBorderSet 區分明確黑色與自動標記色彩,折線與散佈的可攜式記錄支援 2 到 72 點的圓形直徑;色彩與寬度 setter 在變更前驗證並遵守活頁簿讀取租約
TXLSChartSeriesAddTrendline 與 AddErrorBars 建立具型別的數列註釋,而 TrendlineCount 與 ErrorBarCount 回報其集合大小;既有的 MarkerSize 欄位保留原始 BIFF twips,唯讀的 MarkerSizePoints getter 則回傳該值除以 20 的結果,包括小數點數尺寸
TXLSChartAxisHasAxcExtFlag 測試一個原始 AXCEXT 旗標,呼叫端無須解碼位元遮罩
TXLSChartModelAxisGroupCount 回報自圖表解碼出的主要與次要座標軸群組數
TXLSCustomChartAddAreaData 附加預先建好的區域項目,以供儲存時重新繫結公式, ApplyDateAxisModel 將具型別日期座標軸模型套用至原始圖表記錄; GetStoredRecordInfo 不配置記憶體讀取零基記錄 ID 與位元組數, ReadStoredRecord(Index, MaxBytes) 則在回傳 TXLSChartStoredRecord 的分離位元組前檢查位元組上限,不計算公式也不修改快取
TXLSWorksheetAddChartObject 將圖表框架錨定於工作表,並連結至共用圖表建構器
TXLSXChartLayoutResolverTryResolve 解析一個版面矩形並可選擇驗證尺寸,而 ResolveChart 計算圖表、標題、圖例、繪圖區與座標軸矩形

具型別的圖表解碼模型

解碼後的圖表狀態以純記錄與列舉公開,檢查程式碼完全不必自己走訪原始 BIFF 記錄: TXLSChartInfo 攜帶解碼後的圖表摘要,附帶 TXLSChartTypeFamily (cfBar、 cfLine、 cfPie、 cfArea、 cfScatter、 cfRadar、 cfDoughnut、 cfSurface、 cfBubble),每個數列回報 TXLSChartSeriesType, TXLSChart3DState 與 TXLSChart3DInfo 則描述立體檢視。 TXLSChartAxisType (catCategory、 catValue、 catSeries、 catDate)與 TXLSChartLegendPosition 為座標軸與圖例分類,日期座標軸模型則使用 TXLSChartDateUnit (xcduDays、 xcduMonths、 xcduYears)與 TXLSChartDateValues。 TXLSCustomChart 透過 TXLSChartInfo公開解碼後的模型;趨勢線與誤差線註釋是具型別物件(TXLSChartTrendline、 TXLSChartErrorBars),可從每個數列取得

圖表撰寫記錄

圖表工作表與建構器的撰寫接受純記錄而非物件圖: TXLSChartTrendlineInfo、 TXLSChartErrorBarsInfo、 TXLSChartDataLabelsInfo與 TXLSChartSeriesStyleInfo 填入傳給 TXLSWorksheets.AddChartSheet 與共用圖表建構器的數列項目, TXLSPivotChartInfo 則描述圖表附加到樞紐分析表時所用的樞紐圖表框架

Classic 圖表填滿檢查

TXLSCustomChart.GetChartModel 解碼 GelFrame 記錄中受支援的原生 OfficeArt 屬性表與第三層屬性表,包括複雜承載項目之後的屬性;既有的建構器表示法仍受支援,格式錯誤的資料表界限會讓先前的具型別填滿保持不變並回報不受支援的記錄

圖表檢查會在加入具型別狀態前驗證完整的已儲存文字與註釋承載:被截斷的趨勢線名稱或資料標籤分隔符號會透過 _UnsupportedSemanticRecordID 回報其記錄 ID,nil 或尺寸不足的 SeriesText 標頭則把該記錄回報為 BIFF5 與 BIFF8 皆不支援;宣告的數列文字範圍超出其承載時引發 EReadError ,釋放部分模型並讓已儲存的圖表記錄保持不變

標記 getter 與填滿檢查保留原始圖表儲存;宣告外觀擷取路徑另行驗證受支援的核心圖表,未驗證的 rich title 或圖形延伸檢查碼仍不受支援

有界的已儲存圖表、字串與字型讀取器

TXLSChartStoredBytes 是分離的位元組陣列, TXLSChartStoredRecord 包含 RecordId 與 Data;這些讀取器檢查保留的來源儲存體,不建立已解碼的圖表模型也不計算公式

TXLSCustomChart.GetStoredRecordInfo為零基記錄索引回傳記錄 ID 與計數位元組長度,不複製其承載
TXLSCustomChart.ReadStoredRecord在驗證索引與非負 MaxBytes 後複製一個承載;預設位元組上限為 High(Int64)
TXLSCustomChart.ReadStoredFormulaLeafInfo以確切的來源計算器與非負位元組及文字配額檢查一致的已儲存 BRAI 葉節點;外部計算器或轉譯擁有者回傳不受支援的葉節點, AllowUnboundBiff 預設 False
TXLSCustomChart.ReadStoredFormulaLiteral只有在相同的來源與配額檢查通過後才回傳分離常值;不受支援的葉節點引發 EInvalidOperation
TXLSCustomChart.SourceBiffVersion, SourceCodePage保留圖表記錄的唯讀來源資訊
TXLSStringTable.GetStoredStringLength, ReadStoredString使用資料表以 1 為基數的字串身分計數既有 UTF-16 儲存體,只在非負字元配額涵蓋時複製;無效身分與不完整的 UTF-16 儲存體會被拒絕
TXLSFontList.GetStoredNameLength, ReadStoredName在非負字元配額下計數或複製名稱前,先檢查清單零基索引上的已儲存字型鍵值
TMsoFbtOptItem.HasStoredUnicodeString檢查有界的已儲存複合 Unicode 字串中繼資料而不具現化字串
TMsoShapeContainer.HasOrdinaryChartObjectData檢查已儲存圖表物件型別、非零物件身分、受支援旗標,以及不存在未知物件尾端資料

共用字串資料表維護與 SST 輸出

lxStringTable 中的 TXLSStringTable 支撐傳統活頁簿的共用字串;以下成員涵蓋讀取端註冊、槽位維護,以及供往返儲存使用的原始 SST 輸出

KeyExists, AddWithExtrasKeyExists 回報某字串是否已佔用槽位; AddWithExtras 是 Add 的讀取端夥伴,把原始 rgRun rich-text 與 rgExtRst 拼音承載附加到項目而不提高其引用計數,因為每個引用的儲存格稍後會透過正常的新增路徑恢復計數
Replace, ReplaceIndexReplace 在舊槽位減少一個引用,計數歸零時釋放它,再重新加入文字並回傳結果槽位; ReplaceIndex 把一個引用從舊槽位移到新槽位而不複製文字
AddSSTData, InitExtIndexAddSSTData 把原始 SST 承載輸出到寫入器的 blob 清單;接受字型 run 重映射表的多載會在輸出時改寫每個 FormatRun 的字型索引([MS-XLS] §2.5.129),讓 rich run 遵循儲存時的字型重排,空資料表則保留舊有的原樣輸出, InitExtIndex 在輸出前為作用中槽位編排 ExtSST 桶號
SlotCount, ExtIndex, ParsedExtSSTDsst, ParsedExtSSTItemCount, BiffSizeLimitSlotCount 是槽位迭代的以 1 為基數上界,已刪除的槽位讀取為空, ExtIndex 把槽位解析成其 ExtSST 桶號,非作用中槽位回傳 -1, ParsedExtSSTDsst 與 ParsedExtSSTItemCount 保留匯入的 EXT/SST 標頭值, BiffSizeLimit 界定每個輸出記錄區塊——傳統寫入器對 BIFF5 設為 2080 位元組, BIFF8 為 8224

PDF 附件、簽章與 HTML 匯出

IXLSPDFAttachmentSourceWriteTo 將附件位元組串流至 PDF 匯出,無須讓匯出器擁有來源資料
TXLSPDFExportAttachmentDuplicatePolicy 選擇重複名稱的處理方式, AttachmentSpoolThreshold 控制附件暫存,而 DocumentLanguage 寫入文件語言中繼資料
TXLSPDFSignatureTextAlign、 TextSize、 TextColor、 TextBold與 TextItalic 設定可見簽章外觀
TXLSHTMLExportViewMode (型別為 TXLSHtmlViewMode:目前檢視或完整試算表表格)選擇 HTML 呈現方式,而 HotTrackTargets ( TXLSHtmlHotTrackTarget的集合)與 HotTrackColor 設定互動式儲存格及物件醒目提示
TXLSXHtmlExportOptionsViewMode、 HotTrackTargets與 HotTrackColor 提供對等的 XLSX HTML 匯出控制項

計算稽核與 Workbook 控制項

TXLSCalculationAuditReportTruncated 回報問題上限造成的截斷, StackTruncated 回報呼叫堆疊框架截斷,而 Issues 為已記錄的計算問題建立索引
TXLSUserFunctionRegistryGeneration 每當已註冊的使用者函式集合變更時就會改變,使快取的公式繫結得以失效
EXLSReportRecoverableDataCategory 識別呈現給呼叫端的可復原報表資料類別
IXLSWorkBookManualCalculationThreadCount 限制手動計算使用的工作執行緒數
TXLSXDataValidationHasUnknownImeMode 回報 HotXLS 已保留但不識別的 IME 模式值
TXLSXTableColumnCalculatedFormulaArrayRaw 與 ColumnTotalsFormulaArrayRaw 公開表格欄位的原始陣列公式文字

舊版 PivotCache 框架相容性

TXLSPivotCacheRawBucketIndex 識別來源子資料流位置, RawFramingIsLegacy 識別舊版 HotXLS 框架, RawModelIsComplete 回報具型別模型是否代表每一筆記錄,而 CanUpgradeFraming 回報選擇加入的具型別重新輸出是否安全
TXLSPivotCacheStreamId 公開傳統快取的資料流識別碼, SourceDataType 公開傳統來源資料類型, RawHasStorageStream 則回報載入的快取是否來自獨立的 PivotCache 儲存資料流
TXLSWorkbookUpgradeLegacyPivotCacheFraming 選擇只重寫具型別模型完整的舊版 HotXLS 快取框架;一般原始快取重播仍為預設值

StreamId 會寫成 SXStreamID 記錄([MS-XLS] §2.4.303),並重複出現在 SXDB 標頭的 idstm 欄位,兩者必須相等; SourceDataType 會寫成 SXVS 記錄([MS-XLS] §2.4.317: $0001 為工作表、 $0002 為外部、 $0004 為合併彙算、 $0010 為分析藍本),並重複出現在 SXDB 標頭的 vsType 欄位,兩者同樣必須相等。由工作表範圍建立的快取一開始就是工作表類型,而從檔案讀回的快取則保留其子資料流原本攜帶的值,因此 BIFF 寫入器絕不會留下指向自己未曾輸出之記錄的 SXDB 欄位; RawHasStorageStream 標記的則是從自有儲存資料流載入的快取,其 Workbook 全域描述符位於快取記錄之前

剪貼簿整合與貼上選項

TXLSPasteOption = (xlpoValuesOnly, xlpoInsertRows, xlpoInsertCols);
TXLSPasteOptions = set of TXLSPasteOption;

function XLSGetClipboardText: WideString;
function XLSSetClipboardText(const Text: WideString): Boolean;
function XLSSetClipboardTextAndHtml(const Text: WideString;
  const Html: AnsiString): Boolean;
function XLSBuildHtmlClipboard(const Html: AnsiString): AnsiString;
function XLSEncodeClipboardField(const Text: WideString): WideString;
function XLSClipboardHasText: Boolean;
function XLSParseClipboardGrid(const ClipboardText: WideString;
  Loader: TXLSCSVLoader): Boolean;
function XLSClipboardHasXmlSpreadsheet: Boolean;
function XLSGetClipboardXmlSpreadsheet: WideString;
function XLSParseXmlSpreadsheet(const XmlText: WideString;
  Loader: TXLSCSVLoader): Boolean;
function XLSClipboardHasBiff8: Boolean;
function XLSGetClipboardBiff8: AnsiString;
function XLSReadClipboardPasteData(out Biff8: AnsiString;
  out Text: WideString): Boolean;
function XLSSetClipboardBiff8(const Biff8: AnsiString;
  const Text: WideString; const Html: AnsiString = ''): Boolean;
      
這些貼上選項由兩套門面的 PasteFromClipboard 多載共用: xlpoValuesOnly 保留公式儲存格的快取值並跳過格式與合併儲存格, xlpoInsertRows 與 xlpoInsertCols 則會在區塊落下之前先位移既有內容
這些輔助函式封裝 Windows 剪貼簿以供試算表互通:文字類函式使用 CF_UNICODETEXT (若不可用,會透過目前的 ANSI 字碼頁改用 CF_TEXT ), XLSSetClipboardTextAndHtml 在單一交易中同時寫入文字與帶樣式的 HTML Format 承載資料, XLSBuildHtmlClipboard 為整份文件或片段計算 CF_HTML 位元組位移, XLSEncodeClipboardField 則為單一 Tab 分隔欄位加上引號。 XLSParseClipboardGrid 會把剪貼簿文字解析成 Tab 分隔的列,採用的類型嗅探與 TXLSCSVLoader 處理 CSV 時相同; XLSParseXmlSpreadsheet 則用同一套 loader 填充流程,處理以 XLSGetClipboardXmlSpreadsheet 取得的 SpreadsheetML 2003 承載資料; Biff8 輔助函式則偵測並讀取 Excel 自己放到剪貼簿上的原生串流,讓貼上的資料保有值、公式與格式,文字不會流失
XLSReadClipboardPasteData 在單一剪貼簿鎖內同時擷取 Biff8 串流與 Unicode 文字,貼上作業不必在兩次讀取之間重新開啟剪貼簿,兩種格式也不會被同時持有剪貼簿的其他程序搶走。 XLSSetClipboardBiff8 則是對應的寫入端:它在同一筆交易中放上 BIFF8 複合檔串流、Tab 分隔的 Unicode 文字,以及可選的 CF_HTML 承載資料——把 Text 或 Html 傳入空字串即可略過對應的伴隨格式,但 Biff8 部分為必要

儲存格顯示文字解析

TXLSCellDisplayMode = (xcdmFormattedValue, xcdmFormulaText,
  xcdmSuppressedZero);

TXLSCellDisplayOptions = record
  ShowFormulas: Boolean;
  ShowZeros: Boolean;
  SheetProtected: Boolean;
  FormulaWidthFactor: Double;
  DateSerialZero: Double;
end;

TXLSCellDisplayInput = record
  HasFormula: Boolean;
  FormulaHidden: Boolean;
  IsNumericZero: Boolean;
  FormulaText: WideString;
  FormattedText: WideString;
end;

TXLSCellDisplayResult = record
  Mode: TXLSCellDisplayMode;
  Text: WideString;
  TreatAsText: Boolean;
  EffectiveWidthFactor: Double;
end;

function XLSDefaultCellDisplayOptions: TXLSCellDisplayOptions;
function XLSNormalizeFormulaDisplayText(const FormulaText: WideString): WideString;
function XLSResolveCellDisplay(const Options: TXLSCellDisplayOptions;
  const Input: TXLSCellDisplayInput): TXLSCellDisplayResult;
      
單一共用的解析器決定儲存格在特定檢視狀態下要顯示什麼:以公式取代值、隱藏零值、受保護工作表上隱藏公式文字,以及 Excel 套用在公式顯示上的加倍寬度係數。Workbook 檢視器與各轉譯器透過各自的顯示選項進入點呼叫它,應用程式也可以用自己的輸入記錄直接呼叫 XLSResolveCellDisplay ; XLSDefaultCellDisplayOptions 會回傳標準預設值, XLSNormalizeFormulaDisplayText 則把公式字串正規化成適合顯示的形式

Classic 資料驗證物件

TXLSDataValidationType = (xlsDvAny, xlsDvWhole, xlsDvDecimal, xlsDvList,
  xlsDvDate, xlsDvTime, xlsDvTextLength, xlsDvCustom);
TXLSDvErrorStyle = (xlsDvErrStop, xlsDvErrWarning, xlsDvErrInformation);

TDVRange = class;             { one validation rule over one or more ranges }
TDVRangeList = class;         { the per-sheet rule collection }
TDataValidator = class;       { engine that checks edits against the rules }
      
具型別的 TXLSWorksheet.Add*Validation 輔助函式會在工作表的 TDVRange 中建立 TDVRangeList規則;每條規則攜帶自己的 TXLSDataValidationType、界限、輸入訊息與錯誤訊息,以及 TXLSDvErrorStyle。 TDataValidator 會依這些規則評估編輯結果並回報該值是否可接受,這也是 Excel 本身驗證提示背後的同一套檢查

索引色掃描與解析

TXLSIndexedColorKind = (xickPalette, xickAutomatic, xickSystem, xickInvalid);
TXLSSystemColorRole = (xscrNone, xscrWindowText, xscrWindowBackground,
  xscrChartText, xscrChartBackground, xscrChartNeutral, xscrToolTipText);

TXLSIndexedColorResolution = record
  Kind: TXLSIndexedColorKind;
  RawIndex: Int64;
  PaletteSlot: Integer;
  SystemColorRole: TXLSSystemColorRole;
  ARGB: LongWord;
  HasResolvedColor: Boolean;
end;

TXLSNearestIndexedColorMatch = record
  InputARGB: LongWord;
  ColorIndex: Integer;
  PaletteSlot: Integer;
  ARGB: LongWord;
  DistanceSquared: Double;
  ExactMatch: Boolean;
end;

TXLSIndexedColorUsageKind = (xicukFont, xicukFillForeground,
  xicukFillBackground, xicukGradient, xicukBorder, xicukConditionalFormat,
  xicukChart, xicukShape, xicukComment, xicukWorksheet, xicukOther);
      
這些記錄支撐 Workbook 層級的 ResolveIndexedColor、 NearestIndexedColor與 ScanIndexedColorUsage 方法:解析結果會回報索引 token 來自四種 TXLSIndexedColorKind 來源中的哪一種,並附上調色盤槽位、系統色彩角色與正規化的 ARGB;最近比對會再加上 RGB 距離平方與完全相符旗標;使用量掃描則標記每一個鎖定調色盤槽位的消費類別。程式庫內部維護一份以調色盤世代為鍵值的 TXLSIndexedColorMatcher 快取—— FindNearest 直接用它回答最近色彩查詢, UpdateSlot 則修補單一調色盤槽位——因此重複解析不會產生額外配置

A1 參照輔助函式

function XLSA1CellRef(ARow, ACol: Integer): WideString;
function XLSTryParseA1CellRef(const ARef: WideString;
  out ARow, ACol: Integer): Boolean;
function XLSTryParseA1RangeRef(const ARef: WideString;
  out ARow1, ACol1, ARow2, ACol2: Integer): Boolean;
      
獨立的輔助函式,處理與 Workbook API 相同的 A1 表示法:把以 0 為基數的座標格式化成 A1 儲存格參照,並把儲存格或範圍參照解析回來;格式錯誤的輸入會回傳 False ,而不是擲出例外

另請參閱