库的其他 API 成员
本页补全了为核心工作簿、工作表、渲染、导入、诊断和查看器 API 提供支持的公共类型的参考内容,这些类型无需单独的面向任务指南
筛选和条件格式
TXLSAutofilter | Add、 AddAutofilterData、 AssignFrom、 Clear和 ParseAutofilterData 用于编辑或导入筛选定义; SetRangeBounds(ARow1, ACol1, ARow2, ACol2) 恢复从 1 开始、两端包含的边界,不移除已加载的条件或下拉形状,并忽略非正数、反序的边界以及与已加载字段数不一致的列数; Defined、 FirstRow、 FirstCol、 LastCol、 LastRow和 FieldCount 公开其活动边界和被筛选的列数 |
TXLSAutofilterItem | Shape 公开与该项关联的筛选按钮绘图对象,加载的筛选条件则以 TXLSAutofilterDOPER 操作数记录的形式提供—— DataType 选择操作数形式, grbitSgn 携带符号和标志位——便于检查或往返编辑 |
TXLSDataBarSpec | AxisColor、 AxisIsThemeColor、 AxisThemeColorId、 AxisThemeColorTint和 ClearAxisThemeColor 控制坐标轴; Direction、 GradientFill、 NegativeBarBorderColorSameAsPositive、 NegativeBarColor、 NegativeBarColorSameAsPositive和 NegativeBorderColor 控制数据条外观; IsIndexedColor、 IndexedColorIndex和 ClearIndexedColor 管理以调色板索引存储的数据条颜色 |
TXLSIconSetSpec | ThresholdEqualsInclude 为每个图标阈值选择包含或不包含的比较方式 |
TXLSCfValue | IsIndexedColor 和 IndexedColorIndex 报告以旧版调色板索引形式存储的阈值颜色, ClearIndexedColor 用于再次移除这种形式,而主题颜色和字面颜色仍可通过现有访问器访问 |
TXLSCfValue、 TXLSDataBarSpec、 TXLSColorScaleSpec、 TXLSIconSetSpec和 TXLSDxfStyle 接受 AttachWriteGuardOwner,把规则对象链接到其所属工作簿,使编辑自动获得写入防护;所有者实现 TXLSCondFormatWriteGuardOwner,其唯一的 AcquireWriteGuard 方法把工作簿的写入防护交给规则。 TXLSDxfStyle 还添加了 FontColorIndex 与 FontColorIsIndexed ,以及用于调色板索引规则颜色的 FillFgColorIndex / FillFgColorIsIndexed 和 FillBgColorIndex / FillBgColorIsIndexed 这两组属性,并新增差异字体覆盖项 FontName、 FontSize和 FontScheme (空字符串、磅值,或 major / minor这类主题字体槽位),与既有的加粗、斜体、下划线和颜色成员并列;每次赋值都会获取写入防护,并把规则标记为脏以便重新输出
TXLSConnections、 TXLSDataTables和 TXLSQueryTables 公开 OnAcquireWriteGuard (类型分别为 TXLSConnectionAcquireWriteGuard、 TXLSDataTableAcquireWriteGuard和 TXLSQueryTableAcquireWriteGuard),其编辑路径通过该钩子先获取所属工作簿的 IXLSWorkbookWriteGuard 再进行修改,并在修改之后推进工作簿世代;防护会记录 StartGeneration, Complete 则标记写入完成,使依赖缓存能够重建
保留的数据连接带有类型化描述: TXLSConnectionKind (xlckUnknown、 xlckOdbc、 xlckDao、 xlckFile、 xlckWeb、 xlckOleDb、 xlckText、 xlckAdo)对连接分类, TXLSConnectionCredentials (xlccIntegrated、 xlccNone、 xlccStored、 xlccPrompt)记录其身份验证模式,每个连接参数值都以 TXLSConnectionParameterValueKind (xlcpvNone、 xlcpvBoolean、 xlcpvDouble、 xlcpvInteger、 xlcpvString、 xlcpvCell)标记。What-if 数据表通过 TXLSDataTableKind
模拟运算表与数据透视分组
TXLSDataTable | Assign、 ContainsCell和 IsRoot 复制并检查数据表; Kind、 FirstRow、 FirstCol、 LastCol、 LastRow、 AlwaysCalculate、 ColumnInputCol、 ColumnInputRow、 ColumnInputDeleted、 RowInputCol、 RowInputRow和 RowInputDeleted 公开已存储的计算定义 |
TXLSDataTables | Add、 AddExisting、 Delete、 Clear、 Assign、 AdjustForShift和 Offset 维护集合; FindByCell 和 FindRoot 定位包含给定单元格或以给定单元格为根的数据表; Count、 Items和 OnChange 公开集合状态 |
TXLSPivotCacheField | GroupBaseField 和 GroupParentField 公开分组字段与其源字段或父字段之间的关系 |
图标集阈值可以通过编程方式渲染或验证: XLSCfIconSetCount 报告一个 TXLSIconSetType 定义了多少个图标, XLSBuildCfIconGeometry 则用绘制单个图标所需的图元( TXLSCfIconGeometry ,种类TXLSCfIconPrimitive: TXLSCfIconPrimitiveKind、 cfipPolygon、 cfipEllipse、 cfipRect)和点( cfipLine)填充TXLSCfIconPoint,让自定义渲染器与 Excel 内置图标形状保持一致
诊断、公式跟踪与验证
TXLSDiagnostic | Code、 NativeCode、 Message、 Severity、 ExceptionClass、 PartName、 RecordId、 SheetIndex、 SheetName和 StreamOffset 标识一条解析器、写入器或包诊断 |
TXLSDiagnostics | Add 追加一条诊断, Clear 重置集合, Count 与 Items 枚举其中的条目 |
TXLSDiagnosticSeverity and TXLSDiagnosticOperation | TXLSDiagnosticSeverity (xlsDiagnosticInfo、 xlsDiagnosticWarning、 xlsDiagnosticError、 xlsDiagnosticFatal)对一条诊断分类, TXLSDiagnosticOperation (xlsOperationNone、 xlsOperationOpen、 xlsOperationSave、 xlsOperationCalculate、 xlsOperationExport)标明产生它的阶段; OnDiagnostic 处理器从投递的 TXLSDiagnostic |
TXLSFormulaDebugSession | CurrentStep、 DependencyCount、 NodeCount和 StepCount 公开当前调试器快照及其跟踪规模 |
TXLSFormulaTracer | StepCount 报告已记录的求值步骤数量 |
TXLSImportCheck | AddRule、 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 之间
列规则与显式类型
TlxImportColumnRule | Column、 Flags、 Name、 Title、 MinLength、 MaxLength、 Pattern、 ValueKind和 DateSerialMode 配置一列; MinimumValue、 MaximumValue、 HasMinimum、 HasMaximum、 MinimumInclusive和 MaximumInclusive 配置边界; Validate 检查架构配置, PreparePattern 准备正则表达式;两个 Check 重载返回一个布尔值,附错误消息以及可选的 TlxImportViolationKind |
TlxImportRuleFlags | irRequired、 irTextLength、 irPattern、 irUnique和 irCallback 保留其既有检查; irValueType 启用 ValueKind, irValueRange 启用已配置的边界;没有任何标志的列不被检查 |
TlxImportValueKind | ivkAny 接受受支持的有限标量值, ivkNumber 接受有限的数值 Variant, ivkInteger 额外要求整数值, ivkDate 接受日期 Variant 或显式启用的 Excel 序列号, ivkBoolean 要求布尔 Variant, ivkText 要求字符串 Variant |
TlxImportDateSerialMode | idsNone 是默认值,把数值与日期区分开; idsExcel1900和 idsExcel1904 为使用 irValueType 且 ValueKind = ivkDate 的列显式解释数值 |
AddRule(Column) 会替换并释放该列此前的规则;逐值的类型、范围、长度和模式谓词会跳过缺失值、null 和空字符串,而 irRequired 会报告它们;唯一性保留下文描述的独立策略;非空空白仍是一个值;数字不算布尔值,日期不算普通数字,看起来像数字的字符串仍是文本
赋值 MinimumValue 或 MaximumValue 即启用该边界; HasMinimum或 HasMaximum 任一都可以再次禁用它;两个包含性开关默认为 True;边界必须是有限的类型化数字或日期,两个边界必须可比较并描述一个非空区间;反序、缺失、不兼容或空的边界会在工作表验证开始前引发异常
数字边界比较数值,日期边界比较日期;整数对整数的比较保留全部 Int64 和 UInt64 位;不兼容类别的值无法通过范围检查;文本长度和正则谓词继续检查标量的文本表示,正则检查保留既有 IsMatch 行为,因此在需要完整文本匹配时请使用 ^...$ 这样的锚点;无效的正则表达式为兼容起见会禁用其模式检查
日期格式的 Excel 值
从 Excel 导入的单元格即使数字格式显示为日期,也可能包含数值序列号;当这是接受的导入架构时,请显式选择序列号模式;该模式只影响验证,绝不改变存储的单元格值
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 中;数值序列号必须非负,且必须解析到 10000 年 1 月 1 日之前;带小数的序列号保留其当日时间;1900 体系拒绝从 60(含)到 61(不含)之间的每一个序列号,因为该区间表示虚构的闰日;1904 体系把序列号零映射到 1904 年 1 月 1 日
日期边界包含当日时间,因此设为 12 月 31 日午夜的最大值会排除当天更晚的时间;当必须接受整个最后一天时,请使用次年 1 月 1 日作为不包含的上界;诸如 10/08/2026 的文本日期无论配置了哪种序列号模式都保持为文本
组合唯一性与跨列比较
AddUniqueRule(const AColumns: array of Integer): TlxImportUniqueRule | 在一组有序、非空且互不相同的列上添加独立的元组约束; Name 标识规则, Title 作为其消息的前缀, ColumnCount和从零计数的 Columns[Index] 公开其成员, SkipIncompleteRows 默认为 True |
AddCrossColumnRule(ALeftColumn, ARightColumn: Integer; AComparison: TlxImportComparison): TlxImportCrossColumnRule | 添加同行比较,含只读的 LeftColumn和 RightColumn、可编辑的 Comparison、 Name、 Title以及默认为 True 的 SkipBlankValues |
TlxImportComparison | icEqual、 icNotEqual、 icLess、 icLessOrEqual、 icGreater和 icGreaterOrEqual 选择关系;数值对和日期对比较其值,布尔对比 False 排在 True 之前,字符串对按序比较区分大小写的 UTF-16 code unit |
组合键保留每个成员精确的 Variant 类型和文本标识; Integer(1)、 Double(1)、字符串 '1'、布尔值和日期是不同的成员;没有大小写折叠、Unicode 规范化、区域设置解析或分隔符歧义; ('ab', 'c')和 ('a', 'bc') 这样的组合仍然不同;每轮验证都从全新的元组索引开始
SkipIncompleteRows = True 时,缺失、null 或空字符串的成员会把该行排除在元组唯一性之外;设为 False 时这些成员以其原始 Variant 标识参与;重复项把第一个元组列报告为其单元格地址,并通过 FirstDuplicateRow 报告第一个匹配行
既有的单列 irUnique 保留其基于文本、不区分大小写的匹配行为并跳过缺失或 null 值;当某一列需要严格的类型化标识时,请使用 AddUniqueRule([Column])
跨列比较从不把字符串强转为数字、数字强转为布尔或普通数字强转为日期;不兼容类别的混合即使对 icNotEqual 也会失败;字符串比较区分组合与分解的 Unicode,保留内嵌的 null 字符,并按“较短前缀优先”排序; SkipBlankValues = False 时,任一空白操作数都会产生跨列违规
结构化结果与更正工作簿
TlxImportViolation | Row、 Col、 SheetName和 Address 标识单元格, Address 使用 A1 表示法; ValueText和 ErrorText 携带显示信息; RuleName和 Kind 标识配置的规则和失败类别; RelatedColumn 标识跨列失败的第二个操作数, FirstDuplicateRow 标识唯一性失败时的原始行 |
TlxImportViolationKind | ivRequired、 ivTextLength、 ivPattern、 ivUnique、 ivCallback、 ivValueType、 ivValueRange、 ivCellError、 ivFormulaCacheMissing、 ivCompositeUnique和 ivCrossColumn 区分受支持的失败类别 |
Check(Sheet) 返回违规数量, ViolationCount和从零计数的 Violation(Index) 枚举报告;一条列规则报告其第一个失败的谓词,而独立配置的元组和比较规则可以为同一单元格追加更多违规;当调用方需要稳定的应用规则标识时,请赋值有意义的 Name
公式单元格使用其存储的缓存值验证;没有存储缓存结果的公式报告 ivFormulaCacheMissing,错误结果报告 ivCellError;当需要新鲜的公式结果时,请在检查前显式重新计算;验证不访问外部来源、不更改公式定义,也不求值未缓存的公式
OnVerifyCell 保留 TlxImportVerifyCell 回调签名,并在适用的列谓词和唯一性检查成功后运行;它返回布尔值并可设置应用错误消息;回调必须保持工作簿和验证架构不变,工作簿写入会被读取租约拒绝;回调异常会传播,租约随后释放供后续操作使用
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 只会更改工作簿中存储的更新首选项,绝不会授权或发起对外部文件或网络的访问
计算审核与工作簿提示
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 把公式符号失败和缓存值不匹配归并到稳定的结构化类别中,附带工作表坐标、公式、符号、期望值和实际值以及有界的截断,同时保持缓存和工作簿语义不变。 RecalcAndVerifyEx 运行深度审核:它通过依赖图对每个公式求值一次,结果写入隔离的结果叠加层,让依赖单元格读到本轮结果而不是陈旧缓存;它用结果代码对求值失败分类(不支持的参数、循环引用、被拒绝或缺失的外部引用、跳过的数据表、取消、内部失败),为每个失败记录有界的调用栈,并遵循问题预算和进度/取消回调;除非 ApplyResults 在一次完全成功且工作簿结构未变的遍历后原子提交重算值,否则整个过程保持只读AbsoluteTolerance 和 RelativeTolerance 控制的是不匹配报告,而不是中间计算值或显式缓存应用
对数值结果而言,判定不匹配要求绝对差超过 AbsoluteTolerance ,并且在启用相对容差时超过 RelativeTolerance * max(abs(Expected), abs(Actual))
达到任一阈值的相等都被容忍;变更后的值仍会进入审核叠加层,让依赖公式看到当前计算结果,即使差异达不到可报告的程度, ApplyResults 也会提交这些值
只读审核从不更改已存储的缓存TXLSCalculationAuditReport.Issues 的每个元素都是一个 TXLSCalculationAuditIssue; Kind 选择某个 xlcai* 类别, Expected / Actual 携带缓存不匹配时参与比较的值, Stack 是有界的求值调用链,渲染为 Sheet!A1 > Sheet!B2 (最外层帧在前), ExternalTarget 则描述外部引用问题所涉及的外部工作簿。 TXLSRecalcAuditOptions.OnProgress 是一个 TXLSRecalcAuditProgress 接收器,接收 ACurrent / ATotal 的节点进度,并可设置 ACancel 让审核在下一个节点边界停止,只产生一条 xlcaiCancelled 问题RunCalculationAudit 是工作簿级审核包装所委托的引擎入口,接受同样的选项记录。 FormulaIsVolatile 报告一个公式是否会在每次计算时强制重算(例如调用 NOW、 RAND、 TODAY、 OFFSET、 INDIRECT,或包含无法解析的引用)AuditOverlayWrite 为一个单元格存储替换值(工作表索引从一开始计数,行和列按计算器惯例从零开始计数), AuditOverlayRead 和 AuditOverlayHash 查询该层, AuditOverlayClear 清空该层。叠加的值会由普通的单元格值读取器返回,因此重算和深度审核都能观察到它们,而不必修改工作表单元格;清除叠加层即恢复存储的值表公式与 IME 状态
property TXLSXTable.ColumnCalculatedFormulaArrayStates[Index: Integer]: TXLSTableFormulaArrayState;
property TXLSXTable.ColumnTotalsFormulaArrayStates[Index: Integer]: TXLSTableFormulaArrayState;
property TDataValidation.ImeMode: TXLSDataValidationImeMode;
property TXLSXDataValidation.ImeModeKind: TXLSDataValidationImeMode;
SaveExternalLinkValues 设置为 False 会省略经典 XCT 和 CRN 记录或 XLSX 外部工作簿 sheetDataSet 子树,同时保留链接目标、工作表名称、外部已定义名称、关系、公式引用、未知 XML 以及内存中的缓存;在同一工作簿上把该属性恢复为 True 可以再次序列化这份保留的缓存
Web 加载项任务窗格的检查与移除
function IXLSWorkbook.HasWebAddinTaskPanes: Boolean;
function IXLSWorkbook.WebAddinTaskPaneCount: Integer;
function IXLSWorkbook.RemoveWebAddinTaskPanes: Integer;
function TXLSXWorkbook.HasWebAddinTaskPanes: Boolean;
function TXLSXWorkbook.WebAddinTaskPaneCount: Integer;
function TXLSXWorkbook.RemoveWebAddinTaskPanes: Integer;
1303 并在修改之前引发异常,而经典 XLS 和 ODS 不扫描包,直接返回 False、 0和 -1 without package scanning
工作簿对象显示策略
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;
workbookPr.showObjects;缺失值默认为 xlsodmShowAll,未触及的经典保留负载和不受支持的 XLSX 标记保持无损,显式赋值只发出规范值
ExportObjectPlaceholders 则请求同样的低成本策略,不解码图像负载,也不构造图表场景
xlsodmHideAll 会在渲染开始前阻止绘图收集和由对象驱动的范围扩展;工作簿转换会携带全部三种状态,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] 百分比,测量 DPI 限定在 [36, 2400]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 持有一个不可变的校准、工作簿世代、后端标识、测量服务和有界的操作局部度量缓存; CreateXLSRenderGeometry 使用 GDI,而 lxPortableCairo 中的 CreateXLSPortableCairoRenderGeometry 在原生 Linux 或 macOS 上使用显式字体字节与 FreeType/HarfBuzz; MeasureText 返回像素宽度、高度、行高、上伸高度、下伸高度和行数,而 MaximumDigitWidthPixels、 ColumnWidthToPixels、 PixelsToColumnWidth、 PointsToPixels、 PixelsToPoints和 UsableCellWidthPixels 提供共享的几何换算
MarkSheet 度量,而 TXLSPaginationModel.Build 为选定的 RenderBackend捕获一个服务;PDF、SVG、位图、打印预览、工作簿查看器和 HTML 入口点在输出之前选择各自的后端,更改工作簿校准不会改变既有快照,输出也不会写入工作表尺寸
xlsrgbHtml 服务,而增量式的 TXLSXHtmlExportSession 在 BeginExport 中捕获一次并对所有工作表重用该快照;两个导出器都通过 RenderGeometry 公开所保留的服务,用于校准和缓存诊断
IXLSRenderGeometry 属性 WorkbookGeneration、 CacheCapacity和 CacheEntryCount 报告绑定的世代和缓存填充情况供诊断使用, ImplicitWidthMaximumDigitWidthPixels 则返回隐式列宽模拟所依据的数字宽度度量
MeasureText 从 TXLSRenderTextMetrics 填充 TXLSRenderFont 记录(像素宽度、高度、行高、上伸高度、下伸高度和行数),其 Styles 成员是 TXLSRenderFontStyle 标志的集合(粗体、斜体、下划线、删除线)
导入、代码生成、比较与监视
TXLSHTMLImport | LoadFromHTML 重载把 HTML 表格内容从流或文件导入工作表,并支持可选的起始坐标、表格选择和小数分隔符 |
TXLSCodeGen | Language (类型 TlxCodeGenLanguage: lcgDelphi 或 lcgCppBuilder)选择生成语句的源代码方言, GenerateToList 把生成的工作簿代码写入字符串列表, TlxCodeGenOptions 则用合并单元格、列宽或数字格式扩展输出(cgoMerges、 cgoColumnWidths、 cgoNumberFormats;工作表和单元格始终会输出) |
TXLSXWorkbookCompare | Compare 比较类型化存储单元格、公式文本、工作表存在性和合并单元格; Options 添加公式缓存、基础单元格样式和行或列几何, SetNumericTolerance 配置数值相等判定, Count、 Diff和 Report 公开有序结果;参见 工作簿比较 |
TXLSFileMonitor | IntervalMs 选择轮询间隔, SynchronizeEvent 选择同步的回调传递方式; OnFileChanged 处理器可以停用或销毁监控器,或更改 FileName 开始监视另一个文件 |
TXLSCSVLoader and TXLSCSVSaver | 加载器把分隔文本解析为内存中的 Variant 网格—— ParseFile 和 ParseStream 填充网格, CellValue、 RowCount和 ColCount 读回数据——并自动检测分隔符(ValueSeparator)和编码(TXLSCsvEncoding:系统 ANSI、UTF-16、UTF-8);可选的类型提升由 DetectTypes 和逐列的 ColumnTypes 条目控制(TXLSCsvColumnType:auto、text、number、date、boolean、skip); SkipRows、 AutoTrim、 LocaleTolerantNumbers和 FieldWidths 细化固定宽度与区域设置处理。 TXLSCSVSaver.SaveAs 按 RFC 4180 引用规则把网格写回, QuoteAllStrings 强制加引号; TXLSTSVSaver 派生自该保存器,用于制表符分隔输出 |
工作簿比较
来自 lxCompare 的 TXLSXWorkbookCompare 比较两个 TXLSXWorkbook 实例,不重新计算公式,也不修改任何一个工作簿;工作表按不区分大小写的名称配对,仅改变工作表顺序不会产生差异
Options 的默认值为空,两个容差默认为零;默认比较报告新增或移除的工作表、新增或移除的存储单元格、变化的类型化字面值、变化的公式文本以及新增或移除的合并区域
字面值比较区分数字、文本、布尔值、日期、错误和空白:数字 1 与文本 '1' 不同,布尔值与其文本拼写不同,日期保留自身类型,错误按存储的错误代码比较;值相等的数值存储类型比较相等,而精确比较时不同的 Int64 值仍然不同
lcoFormulaCachedResults | 对公式文本匹配的单元格比较既有缓存结果,并区分缺失或已失效的缓存与可用的缓存;类型化值相同的已加载缓存和已计算缓存比较相等 |
lcoCellStyles | 在匹配的存储单元格坐标处比较解析后的基础样式,包括字体、填充、渐变、边框、对齐、数字格式和单元格保护;无关的样式池插入顺序不产生差异,主题颜色按各自工作簿的当前主题解析 |
lcoAxisGeometry | 比较有效行高、列宽、隐藏标志、大纲级别、折叠标志和工作表默认值;等于有效默认值的显式尺寸与隐式尺寸比较相等 |
lcoDefinedNames | 比较工作簿级和工作表级名称、其公式定义、可见性、批注和宏标志;作用域跟随工作表名称,插入顺序不产生差异 |
lcoDataValidations | 按存储顺序比较验证定义,包括规范化的目标区域、公式、运算符、输入提示、错误消息和控制标志;单个定义内目标区域顺序的变化不产生差异 |
lcoConditionalFormats | 按存储顺序比较条件格式定义,包括有效优先级、stop-if-true 行为、目标区域、公式、差异样式以及受支持的色阶、数据条和图标集设置;样式池和索引调色板标识解析为其语义值 |
lcoTables | 按名称配对表格并比较区域、标题、汇总、样式设置、批注、列名、标签、公式、数组标志、唯一名称、连接名称、筛选条件和排序条件;表格 ID、列 ID 和插入顺序不产生差异,颜色筛选和排序差异样式 ID 解析为外观 |
lcoDrawings | 按绘制顺序比较类型化绘图定义,保留组子项顺序和图表 plot 组顺序;受支持的规范定义覆盖图像、文本框、图表、组、完整的类型化 Slicer 视图和类型化 Timeline 视图,不透明或不受支持的绘图节点引发 EXLSSemanticSnapshot |
lcoBlankStyleRegions | 比较两侧均无存储单元格的坐标处解析后的基础样式,包括工作表默认值和虚拟样式叠加;等效的矩形细分比较相等,相邻的相等变更合并为矩形而不具体化单元格 |
lcoRichTextRuns | 在匹配的存储文本单元格处比较有效 run 字体和文本,为省略的 run 属性继承基础字体,忽略空 run,并合并有效字体相等的相邻 run;纯文本与等效的默认字体富文本 run 匹配 |
lcoPivotTables | 按名称配对类型化的数据透视表定义,并比较来源绑定、布局、字段、有序视图成员、数据聚合、筛选器、分组引用、计算定义、样式和原生具体化标志;缓存和共享成员 ID 解析为来源标识和类型化值 |
lcoPivotCaches | 按来源标识配对本地类型化的数据透视表缓存定义,并比较刷新元数据、字段元数据、分组标签与区域、无序共享成员域以及有序类型化记录值;数值、文本、布尔、日期、错误和空成员保持不同,日期保留 binary64 精度,缓存 ID 和共享成员槽位顺序不产生差异 |
lcoSlicerState | 配对命名的 Slicer 视图和缓存,包括表格列或非 OLAP 数据透视表绑定、连接的数据透视表名称、类型化成员选择、交叉筛选和排序设置、标题、滚动位置、列布局、尺寸、样式、锁定与标题标志以及锚定几何;绑定解析表格、列、工作表和缓存 ID |
lcoTimelineState | 配对命名的类型化 Timeline 视图和本地非 OLAP 缓存,包括源字段和连接的数据透视表绑定、活动日期选择、标题、级别和工作表边界;非活动选择省略未使用的日期端点 |
Options 的类型是 TlxCompareOptions,即 TlxCompareOption 的集合;启用一个选项会把它的差异加到默认比较中
SetFeatureLimits(MaxBytes, MaxItems) 在更改任一设置前验证两个正数限制; MaxFeatureBytes 默认 64 MiB, MaxFeatureItems 默认 1,000,000,单独的 setter 保留同样的原子验证
功能预算覆盖来自两个工作簿的分离规范字节总量和计数条目,包括富文本 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) 使用从零开始的索引返回比较器拥有的 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 外观层的存储单元格内容和选定的类型化功能定义;名称、验证、条件格式、表格和图表公式的拼写通过语义公式解析器规范化,而数据透视表计算公式保留其存储的定义文本
表格筛选器接受受支持的自定义、值列表、日期分组、颜色、图标、动态和 top-count 形状以及排序条件;独立的筛选列和值集条目规范化其顺序,布尔默认值和数字拼写规范化,排序条件顺序仍然有效
类型化的数据透视表、Slicer 和 Timeline 比较解析受支持的本地工作表来源和非 OLAP 绑定,不刷新也不评估可用性;原生 Slicer 可用性提示是派生的显示元数据,而成员选择和可识别的原生排序元数据会被比较
不透明的原生绘图属性、不完整的二进制数据透视表模型、外部或 OLAP 数据透视表来源、原始 PivotTable 补充记录和扩展 XML、未知的筛选器 XML,以及未建模的 Slicer 或 Timeline 扩展属性或子元素都会引发 EXLSSemanticSnapshot;保留此类数据并不意味着语义等价
选定的导入 PivotTable 和 PivotCache 功能也在比较类型化投影之前验证保留的原生 XML,包括嵌套字段元数据和缓存记录;未知命名空间、属性、子元素和扩展负载在同一协作功能限制内显式失败,而建模的 Slicer 缓存绑定仍然受支持
TSimpleDomNode.RawName 在读取器规范化的 Name 之外暴露原始元素 QName,允许命名空间敏感的检查而不改变既有的解析器名称匹配
工作簿设置和不透明的包元数据仍在比较范围之外;基础样式比较不评估条件格式或表样式外观,绘图比较保留语义快照受支持的图像、文本框、图表和有序组边界
有效富文本属性
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、基线和自动颜色;即使其值等于新 run 的初始默认值,setter 也会把属性标记为显式
TXLSXRichText.HasUnsupportedAppearance 报告类型化 run 模型无法表示的原生富属性;可移植捕获和有效富文本比较会显式拒绝此类 run,而受支持的共享/内联 run 属性和空白保留其导入语义
有效富文本比较在合并相邻相等 run 之前应用显式的 false 覆盖;继承与显式清除的属性在共享字符串去重和受支持的 XML 往返中保持不同
TXMLReader.ResolveNamespaceUri(Prefix, Uri) 在不改变读取器位置的情况下解析当前作用域内的命名空间绑定,不存在绑定时返回 false;空前缀请求默认命名空间,原始 QName 仍可用于命名空间敏感的检查
不可变的富文本/场景记录、捕获源扩展和 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 字节,当不存在富文本且 IncludePlainText 为 false 时返回空缓冲区;可选的 ConsumedItems: PInteger 接收捕获的 run 数量,纯文本捕获保留打包存储
TXLSPivotCacheField.GroupItemTypes[Index] 公开与 GroupItemLabels[Index] 对应的类型化种类,并拒绝存储分组标签域之外的索引
公式元数据与数据透视表查询回调
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 在不刷新记录的情况下应用格式读取器优先级
显式代码页字节
| Member | Contract |
|---|---|
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;所属经典工作簿在初始化或调用 SetCodePage 时同步其计算器 |
TXLSFontList.GetFont, TXLSNumFormatList.GetNumFormatBlob, TXLSStyles.GetStyleBlob | 可选的 CodePage 参数默认 1252 并编码 BIFF5 文本;BIFF8 输出保持 Unicode |
TMsoDrawing.StoreNotes | 可选的 CodePage 参数默认 1252 并编码 Unicode 之前的批注文本;既有的 BIFF5 普通批注记录大小限制保持不变;这不添加该记录格式中没有的作者、富文本或几何字段 |
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 或面向字节的流操作;把它转换为默认 AnsiString 可能在原生 FPC 系统上重新编码其字节
经典定义名称与数组公式块
TXLSCustomName deferred compilation | ClearDefinition 释放已编译的 RefersTo AST,同时保留存储的定义字符串和任何原始导入 NAME 字节, Compile 从存储的定义重建 AST 并报告成功, GetCompiledFormula 自动重新编译,因此被清除的名称在下次读取时重新解析; PeekCompiledFormula 返回当前 AST 而不触发重新编译, StoredDefinition 暴露未解析的定义源 |
TXLSCustomName identity and flags | StoreIndex 公开名称在其集合中的存储位置, NameID 公开计算引擎使用的工作簿唯一数字标识, IsHidden和 IsMacro 读写 BIFF NAME 记录的隐藏和宏标志 |
TXLSFormulatArray.RowsCount, ColsCount | 报告解析后的数组公式块的行和列范围;两者都从 1 开始,并约束输出方法携带的逐单元格项域 |
经典字体、格式与样式池
TXLSFontList stored font attributes | 索引属性在从零开始的列表索引处镜像存储的字体键: Name、 Size、 ColorIndex、 Bold、 Italic、 Strikethrough和 Underline 与 OutLineFont、 Shadow、 SubScript、 SuperScript、 Family和 CharSet 一起提供只读检查 |
TXLSNumFormatList.AddValue, FmtExists | AddValue 注册格式字符串并返回其索引,把内置格式拼写映射到规范 id 并标记日期和时间格式; FmtExists 报告某个自定义格式字符串是否已注册 |
TXLSNumFormatList.IsDateFormat, IsDateFormatValue | IsDateFormat 报告索引处存储的格式是否被标记为日期或时间格式, IsDateFormatValue 直接对格式字符串测试日期和时间 token |
TXLSStyles.AddStyle, AddBuiltinStyle | AddStyle 注册绑定到 XF 记录索引的命名自定义单元格样式, AddBuiltinStyle 按内置 id 注册内置单元格样式,并连同行列级别样式使用的大纲级别 |
TXLSStyles.BuiltinStyleName | 类函数,为内置 id 0 到 53 返回规范的 Excel 内置单元格样式显示名称;超出范围的 id 返回空名称,写入器从而回退到原始 builtin 字节形式 |
包与二进制存储辅助工具
TXLSXOpaquePackage | LoadWorkbookXmlMetadata 捕获工作簿级 XML 状态, MarkAllPartsClean 重置脏标记, WorkbookExtLstXml 和 WorkbookRootAttributesXml 公开保留下来的工作簿 XML 片段; IsDiscardedPart 报告某个部件名称是否已被丢弃操作(例如 Web 加载项清理)移除 |
TXLSFileStorage | Load、 LoadFolder、 Write和 WriteFolder 传输复合文件内容; Child 和 Count 枚举子条目,每个条目都是一个 TXLSFileItem ——一个命名的存储节点,其 TXLSFileStream 子类把存储的字节作为 TXLSBlob 携带, DataSize 报告负载长度 |
TXLSBlob | Add 追加另一个二进制数据块, AddByte、 AddWord、 AddLong、 AddDouble、 AddString和 AddWideString 追加带类型的值; CopyData、 CopyMem、 FillByte、 Write、 Clear、 Reset和 Dump 管理内容; Buff 和 DataLength 公开存储 |
TXLSBlobList | Append、 AppendList、 CopyData和 Write 组合或输出条目; Entries 和 TotalSize 公开列表状态 |
TXLSWideStringBuilder | AddString 追加文本, Length 报告累计的字符数 |
绘图与工作簿查看器新增内容
TXLSFillFormat | PictureFill 配置以图片为背景的形状填充, FillType 选择写入器输出的填充类型(纯色、渐变、图片或预设纹理) |
TXLSShapes | AddScrollBar 和 AddSpinner 创建窗体控件——返回的 TXLSScrollBar 和 TXLSSpinner 对象公开控件几何信息和链接单元格,spinner 还添加 Min、 Max和 Inc 步长限制——而 RegisterScrollBar 和 RegisterSpinner 注册从工作簿加载的控件 |
TXLSWorkbookViewer | CanUndo 和 CanRedo 报告事务历史的可用性; ClearSelectedRange、 CopySelectedRange、 PasteSelectedRange和 PasteText 作用于选定区域, ReferencePickMode 启用交互式的单元格或区域引用选择 |
TXLSWorkbookEditHistory | 来自 lxWorkbookViewer 的无头内容事务引擎绑定借用的经典或 XLSX 工作簿,提供区域保护预检、Unicode 文本复制和粘贴、区域清除,以及每个操作一次撤销/重做事务;参见 无头编辑事务 |
TXLSCellContentSnapshot | 两个工作表类都暴露 ReadCellContent(Row, Col)和 RestoreCellContent(Snapshot),在源工作表中按从 1 开始坐标进行分离式原生内容捕获与还原;捕获不求值公式、不创建缺失单元格,也不具体化打包存储,不可变的 NativeData 负载保留富文本、公式缓存和单元格样式;直接还原是低层操作,调用方必须自行验证保护和结构边界 |
分页、图像输出与打印
XLSValidateCachedChartSceneModel, XLSRecordCachedChartScene | 在不解析单元格的情况下预检缓存图表元数据,并为 lxPortableChart 中的分离图表记录有界的向量和文本图元,返回 TXLSPortableSceneObjects 以及条目、字节和文本统计; lxPagination 入口点为既有 Windows 调用方保留同一共享实现;当前子集覆盖带单一主 plot 组的普通柱形、条形、折线、散点、饼图、圆环图和单系列面积图,记录要求经过验证的原生元数据、有限且严格有序的缓存点以及未附加的图表模型;参见 缓存图表记录 |
TXLSGraphicsBackend | DrawTiledImage 在经过裁剪的页面区域内反复平铺绘制工作表背景 |
TXLSPaginationModel | CompactRangeMode、 IncludeDrawings、 IncludeGridlines、 IncludeCellBorders和 PaintPageBackground 控制页面内容; RenderDPI、 RenderColorMode和 RenderSession 公开输出分辨率、颜色处理和活动渲染会话 |
TXLSCellImageExporter | Measure 计算经典或 XLSX 范围的像素尺寸; ImageFormat、 JpegQuality、 MaxPixels、 MaxBytes、 IncludeObjects、 IncludeGridlines、 IncludeCellBorders、 BackgroundColor、 TransparentBackground、 BeforePaint、 AfterPaint和 PaginationModel 配置并观察渲染过程 |
TXLSPageImageExporter | BeforePaint、 AfterPaint、 MaxPixels、 MaxBytes、 BackgroundColor和 TransparentBackground 为分页图像导出应用同样的绘制钩子和输出安全限制 |
TXLSPrintDocument | PrintWorksheet、 PrintWorkbook和 PrintAllVisibleSheets 把经典或 XLSX 内容发送到 VCL 打印机; FirstPage、 PrintRangeOnly、 Collate、 Copies、 OnBeforeNewPage和 OnAfterGeneratePage 控制打印作业 |
经典图表模型与工作表图表对象
TXLSXChartSeries | LineVisible、 LineColorRGB和 LineWidthPoints 描述独立的系列描边; LineStyleSet、 LineColorSet和 LineWidthSet 保留显式设置, EffectiveLineVisible 解析旧的仅填充约定; MarkerFillSet和 MarkerBorderSet 把显式黑色与自动标记颜色区分开,折线和散点的可移植录制支持 2 到 72 磅的圆形直径;颜色和宽度 setter 在变更前验证并遵守工作簿读取租约 |
TXLSChartSeries | AddTrendline 和 AddErrorBars 创建强类型的系列注解, TrendlineCount 和 ErrorBarCount 报告相应集合的大小;既有的 MarkerSize 字段保留原始 BIFF twips,而只读的 MarkerSizePoints getter 返回该值除以 20,包括带小数的磅值 |
TXLSChartAxis | HasAxcExtFlag 测试单个原始 AXCEXT 标志,无需调用方自行解码位掩码 |
TXLSChartModel | AxisGroupCount 报告从图表解码出的主坐标轴组和次坐标轴组数量 |
TXLSCustomChart | AddAreaData 追加一个预构建的面积图项供保存时重新绑定公式, ApplyDateAxisModel 把强类型的日期轴模型应用到原始图表记录; GetStoredRecordInfo 无分配地读取从零开始的记录 ID 和字节数, ReadStoredRecord(Index, MaxBytes) 在返回 TXLSChartStoredRecord 中的分离字节前检查字节限制,不求值公式,也不修改缓存 |
TXLSWorksheet | AddChartObject 在工作表上锚定一个图表框架,并将其连接到共享的图表构建器 |
TXLSXChartLayoutResolver | TryResolve 解析一个布局矩形并可选地进行尺寸验证, 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 则描述图表附加到数据透视表时使用的数据透视图框架
经典图表填充检查
TXLSCustomChart.GetChartModel 解码 GelFrame 记录中受支持的原生 OfficeArt 属性表和第三属性表,包括复杂负载条目之后的属性;既有的构建器表示仍然受支持,格式错误的表边界使此前的类型化填充保持不变,并报告不受支持的记录
图表检查在添加类型化状态前验证完整的存储文本和批注负载:被截断的趋势线名称或数据标签分隔符通过 _UnsupportedSemanticRecordID 报告其记录 ID,而 nil 或尺寸不足的 SeriesText 头对 BIFF5 和 BIFF8 都报告该记录不受支持;声明的系列文本范围超出其负载时引发 EReadError,释放部分模型并使存储的图表记录保持不变
标记 getter 和填充检查保留原始图表存储;声明的外观捕获路径另行验证受支持的核心图表,而未经验证的富标题或形状扩展校验和仍然不受支持
有界的存储图表、字符串与字体读取器
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, AddWithExtras | KeyExists 报告某个字符串是否已占据槽位; AddWithExtras 是 Add 的读取端伴生方法,把原始 rgRun 富文本和 rgExtRst 语音负载附加到条目而不提升其引用计数,因为每个引用单元格稍后都会通过正常的添加路径恢复计数 |
Replace, ReplaceIndex | Replace 在旧槽位减少一次引用(计数到零时释放),并重新添加文本,返回结果槽位; ReplaceIndex 把一个引用从旧槽位移到新槽位而不复制文本 |
AddSSTData, InitExtIndex | AddSSTData 把原始 SST 负载输出到写入器的块列表;带字体 run 重映射表的重载在输出途中重写每个 FormatRun 的字体索引([MS-XLS] §2.5.129),使富 run 跟随保存时的字体重排序,而空表格保留旧的原样输出; InitExtIndex 在输出前为活动槽位编号 ExtSST 桶 |
SlotCount, ExtIndex, ParsedExtSSTDsst, ParsedExtSSTItemCount, BiffSizeLimit | SlotCount 是槽位迭代的从 1 开始上界(已删除槽位读取为空), ExtIndex 把槽位解析到其 ExtSST 桶号,非活动槽位返回 -1, ParsedExtSSTDsst和 ParsedExtSSTItemCount 保留导入的 EXT/SST 头值, BiffSizeLimit 约束每个输出的记录块——经典写入器为 BIFF5 设为 2080 字节,BIFF8 为 8224 |
PDF 附件、签名与 HTML 导出
IXLSPDFAttachmentSource | WriteTo 把附件字节流式送入 PDF 导出,不要求导出器拥有源数据 |
TXLSPDFExport | AttachmentDuplicatePolicy 选择重名处理方式, AttachmentSpoolThreshold 控制附件假脱机, DocumentLanguage 写入文档语言元数据 |
TXLSPDFSignature | TextAlign、 TextSize、 TextColor、 TextBold和 TextItalic 配置可见签名的外观 |
TXLSHTMLExport | ViewMode (类型 TXLSHtmlViewMode:当前视图或完整电子表格)选择 HTML 呈现方式, HotTrackTargets ( TXLSHtmlHotTrackTarget集合)和 HotTrackColor 配置交互式单元格和对象高亮 |
TXLSXHtmlExportOptions | ViewMode、 HotTrackTargets和 HotTrackColor 提供等效的 XLSX HTML 导出控制 |
计算审核与工作簿控制
TXLSCalculationAuditReport | Truncated 报告因问题数量上限而被截断, StackTruncated 报告调用栈帧被截断, Issues 按索引访问已记录的计算问题 |
TXLSUserFunctionRegistry | Generation 就会改变,从而允许使缓存的公式绑定失效 |
EXLSReportRecoverableData | Category 标识呈现给调用方的可恢复报表数据类别 |
IXLSWorkBook | ManualCalculationThreadCount 限制手动计算使用的工作线程数量 |
TXLSXDataValidation | HasUnknownImeMode 报告 HotXLS 已保留但无法识别的 IME 模式值 |
TXLSXTable | ColumnCalculatedFormulaArrayRaw 和 ColumnTotalsFormulaArrayRaw 公开表格列原始的数组公式文本 |
旧版 PivotCache 框架兼容性
TXLSPivotCache | RawBucketIndex 标识源子流位置, RawFramingIsLegacy 标识 HotXLS 的旧框架, RawModelIsComplete 报告强类型模型是否覆盖了每条记录, CanUpgradeFraming 报告选择加入的强类型重写是否安全 |
TXLSPivotCache | StreamId 公开经典缓存的流标识, SourceDataType 公开经典源数据类型, RawHasStorageStream 报告加载的缓存是否来自独立的 PivotCache 存储流 |
TXLSWorkbook | UpgradeLegacyPivotCacheFraming 选择只重写强类型模型完整的 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 标记从自己的存储流加载的缓存,其工作簿全局描述符位于缓存记录之前
剪贴板集成与粘贴选项
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 则在内容块落下之前移动现有内容CF_UNICODETEXT (并通过当前 ANSI 代码页回退到 CF_TEXT ), XLSSetClipboardTextAndHtml 在一个事务中写入文本和带样式的 HTML Format 负载, XLSBuildHtmlClipboard 为文档或片段计算 CF_HTML 字节偏移, XLSEncodeClipboardField 为一个制表符分隔字段加引号。 XLSParseClipboardGrid 把剪贴板文本解析为制表符分隔的行,使用与 TXLSCSVLoader 解析 CSV 相同的类型探测; XLSParseXmlSpreadsheet 对通过 XLSGetClipboardXmlSpreadsheet 获取的 SpreadsheetML 2003 负载执行同样的加载器填充; Biff8 辅助函数检测并读取 Excel 自己放到剪贴板上的原生流,使粘贴的数据保留值、公式和格式,文本不会丢失XLSReadClipboardPasteData 在一次剪贴板锁定内同时捕获 Biff8 流和 Unicode 文本,粘贴操作不必在两次读取之间重新打开剪贴板,也不会因并发占用而丢失其中任何一种格式。XLSSetClipboardBiff8 是与之对应的写入端:它在一个事务中放置 BIFF8 复合文件流、制表符分隔的 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;
XLSResolveCellDisplay ; XLSDefaultCellDisplayOptions 返回规范的默认值, XLSNormalizeFormulaDisplayText 为显示而规范化公式字符串经典数据验证对象
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);
ResolveIndexedColor、 NearestIndexedColor和 ScanIndexedColorUsage 方法:解析结果报告一个索引颜色标记来自四种 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;
False 而不是抛出异常