HotXLS Docs

直接读取器与写入器 API

TXLSDirectReader 和 TXLSDirectWriter 处理 XLSX 包而无需在内存中持有完整的工作表网格,因此描述工作表的一次 API 调用必须在相应的流式阶段之前或期间进行

写入器生命周期与单元格值

TXLSDirectWriter.BeginFile 或 BeginStream 启动一个包,工作表方法一次定义一个工作表, Finish 提交最终的包

Scalar cellsWriteString、 WriteRichString、 WriteNumber、 WriteBoolean、 WriteDateTime和 WriteError
Formula cellsWriteFormula、 WriteFormulaNumber、 WriteFormulaString、 WriteFormulaBoolean、 WriteFormulaDateTime和 WriteFormulaError 接受调用方提供的缓存结果
Shared stringsUseSharedStrings 启用包级字符串去重
StatisticsCellCount 报告已发出单元格的数量
PanesFreezePanes(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 之间不能更改 pass 选项,但在 EOF、重新选择工作表或关闭之后又可重新设置

每个 TXLSRowCursorCell 独立于 HasFormula 报告 FormulaTextAvailable;经典 XLS 只暴露公式存在性和缓存结果,不声称有不可用的 token 文本,而 IncludeFormulaText 可以在累积之前抑制 XLSX 和 ODS 的公式文本

ODS 遍历持有一个物理行模板,把重复的行块裁剪到请求的区间,在重复跨度内直接跳到选定的列,跨过被覆盖的单元格而不把它们作为值返回,并通过 OnSkippedRecord

State 区分 xrcsClosed、 xrcsBeforeFirst、 xrcsActive、 xrcsEof、 xrcsCancelled和 xrcsFaulted; Cancel 是幂等的,会使当前行失效,并释放活动工作表流但保留源,这样显式选择工作表后就能开始新一轮遍历

流重载默认 xsoBorrowed,在关闭时恢复调用方的初始位置;传入 xsoOwned 可在成功打开后转移所有权;打开失败永远不会消耗调用方的所有权

CurrentRowView 在不复制的情况下借用当前行数组,并在每次访问前检查代号;推进、选择、取消、关闭或销毁游标都会使视图失效,之后再访问会抛出 EXLSRowCursorViewInvalidated on later access

PeakRowBufferedBytes 是自最近一次 Open 以来为单个逻辑行保留的单元格记录、托管负载、富文本和格式后端数据的单调估值;它面向有界内存回归诊断,而不是精确的堆统计

SheetPassesStarted 统计工作表后端成功启动的次数;通过回调门面查看工作表名称或跳过工作表并不会打开工作表部件

Forward 回调适配器

TXLSForwardReader 把 XLS、XLSX、ODS、CSV 和 TSV 解码委托给 TXLSRowCursor,把每个当前行单元格转换为 OnCell 回调,并保留相同的行边界、列投影、公式状态、富文本、密码、跳过记录、流位置和有界缓冲约定

PeakRowBufferedBytes 和 SheetPassesStarted 在回调表面上暴露共享的游标诊断;经典 XLS 额外保留 ClassicBytesRead 和 ClassicPeakBufferedBytes

读取器事件与记录类型

读取器和行游标暴露可选的回调和纯记录,全部声明在 lxDirectRead中。每个回调的形状相同:记录描述一个流式项目,设置 Abort 即停止扫描(工作表事件还接受 SkipSheet)

CellsOnCell (类型 TXLSDirectCellEvent)为每个单元格交付一个 TXLSDirectCell ,其 Kind (TXLSDirectCellKind: xdkEmpty、 xdkNumber、 xdkString、 xdkBoolean、 xdkDate、 xdkError)选择已填充的值字段;富文本以 TXLSDirectRichText 传递,其中持有 TXLSDirectRichTextRun 条目,每个条目带 TXLSDirectRichColor (类型 TXLSDirectRichColorKind)、 TXLSDirectRichUnderline和 TXLSDirectRichVertAlign,外加可选的 TXLSDirectPhoneticProperties 和 TXLSDirectPhoneticRun 数据
Sheet framingOnSheet (TXLSDirectSheetEvent)可以在解析某个工作表的单元格之前整个跳过它; OnSkippedRecord (TXLSDirectSkippedEvent)连同记录 id 和原因报告格式错误或被截断的内容
Sheet layoutOnDimension、 OnSheetFormat、 OnColumn、 OnRow、 OnMerge和 OnPane 分别交付 TXLSDirectDimension、 TXLSDirectSheetFormat、 TXLSDirectColumn、 TXLSDirectRow、 TXLSDirectMerge和 TXLSDirectPane 记录;窗格状态使用 TXLSDirectPaneState (xdpsSplit、 xdpsFrozen、 xdpsFrozenSplit、 xdpsUnknown)
Cursor stateTXLSRowCursor.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, or declares exhaustion with Eof = True 来中断循环。这些辅助方法负责在坐标与保护原语之间转换: XLSDirectColName renders a zero-based column as its A1 letters, XLSDirectParseRef parses an A1 cell reference, and XLSDirectPasswordHash computes the legacy password hash the sheet-protection records store

另请参阅