HotXLS 文档

概览

HotXLS Logo
HotXLS Excel 读/写库是面向 Delphi 与 C++Builder 的高性能 Excel 读写组件 它可以创建新的 Excel 电子表格,并在无需安装 Microsoft Excel 或 Office 的情况下读取或修改现有的 XLS 和 XLSX 工作簿
HotXLS 完全使用 Object Pascal 编写。它在二进制和 OOXML 层面直接读写 Excel 文件 因而没有 COM/OLE 自动化开销,也不依赖 Office 的授权或存在。HotXLS 支持 Delphi 和 C++Builder XE5 至 13 Florence
经典 XLS 颜色格式化有意保持基于调色板的方式。参见 经典 XLS 颜色模型 了解 ThemeColor / TintAndShade 的决策

双外观架构

HotXLS 提供两个并存的外观单元,使旧有 XLS 代码与新 XLSX 代码能够并存而无需任何重构
lxHandle Excel 97–2003 BIFF8 格式(.xls)的主外观,以及 HTML、RTF、CSV 和 TSV 导出。所有现有用户代码可继续使用此单元而无需更改。入口点: TXLSWorkbook、TXLSWorksheet、IXLSWorkbook、IXLSRange
lxHandleX Excel 2007+ OOXML 格式(.xlsx)和 OpenDocument 电子表格 (.ods)读写的主外观。提供自己的工作簿和工作表类型,因此 XLSX 特有行为不会被附加到 BIFF 代码路径上。入口点: TXLSXWorkbook、TXLSXWorksheet、TXLSXCell
两个外观共享同一公式引擎、同一 Unicode 支持层以及同一导出流水线 参见 XLSX 外观概览,了解 lxHandleX 所公开的完整类层次结构

快速入门

以下代码片段展示了创建包含一个工作表并向单元格写入值的工作簿所需的最少代码

经典 XLS(lxHandle)

uses lxHandle;

var
  Book: IXLSWorkbook;
  ws:   TXLSWorksheet;
begin
  Book := TXLSWorkbook.Create;
  // 添加一个工作表并为其命名
  ws := Book.Sheets.Add;
  ws.Name := 'Sheet1';

  // 使用 A1 表示法向单元格写入值
  ws.Range['A1'].Value := 'Hello';
  ws.Range['B1'].Value := 42;
  ws.Range['C1'].Formula := '=B1*2';

  // 应用基本格式
  ws.Range['A1'].Font.Bold := True;
  ws.Range['A1'].Interior.Color := clYellow;

  Book.SaveAs('output.xls');
end;

XLSX(lxHandleX)

uses lxHandleX;

var
  Book: TXLSXWorkbook;
  ws:   TXLSXWorksheet;
  cell: TXLSXCell;
begin
  Book := TXLSXWorkbook.Create;
  try
    ws := Book.Sheets.Add('Sheet1');

    // 写入一个字符串和一个数值
    ws.Cells[1, 1].Value := 'Product';
    ws.Cells[1, 2].Value := 'Price';
    ws.Cells[2, 1].Value := 'Widget';
    ws.Cells[2, 2].Value := 9.99;

    // 应用货币数字格式
    cell := ws.Cells[2, 2];
    cell.NumberFormat := '$#,##0.00';

    Book.SaveAs('output.xlsx');
  finally
    Book.Free;
  end;
end;
如需在单个演示工程中同时涵盖两个外观的更全面走查,请参见 API Tour 演示

特性

文件 I/O 与流支持

读取现有 Excel 文件、写入新文件或现有 Excel 文件、处理经典 XLS 密码保护和 XLSX 加密保存工作流,并能快速列出 XLS 和 XLSX 文件或流的表名而无需加载整个工作簿。通过 IXLSWorkbook.OpenCSV 支持将 CSV 作为工作簿打开

单元格值与公式

读取和写入所有原生 Excel类型的单元格值:数字、字符串、日期/时间、布尔值和公式 内置计算引擎可在经典 XLS 和 XLSX 工作簿中计算公式,支持
  • 文本函数(LEFT、MID、TRIM、SUBSTITUTE、…)
  • 日期和工作日函数(DATE、NETWORKDAYS、WORKDAY、…)
  • 工程与进制转换函数(BIN2DEC、HEX2DEC、…)
  • 按位运算函数(BITAND、BITOR、BITXOR、…)
  • 统计与聚合函数(AVERAGE、SUMIF、COUNTIFS、…)
  • 数学函数(ROUND、MOD、POWER、…)
OnUserFunction 回调允许在运行时处理自定义或不受支持的工作表函数 参见 OnUserFunction 回调 了解签名与示例
公式计算示例

单元格格式

全面访问单元格外观属性:
  • 字体 — 名称、大小、颜色(RGB 或主题颜色 + 色调)、粗体、斜体、下划线、 删除线、上标、下标、阴影和轮廓
  • 对齐 — 水平和垂直对齐、文本方向(角度)、缩进 级别、自动换行、缩小以填充以及阅读顺序(RTL/LTR)
  • 边框 — 全部四条边和对角线、线型、粗细以及 RGB / 主题颜色
  • 内部(填充) — 实心填充、图案填充、前景色和背景色 包括带 TintAndShade 的主题颜色
  • 数字格式 — 用于日期、时间、货币、 百分比和科学记数的内置与自定义格式字符串
  • 批注 / 注释 — 添加、读取和设置单元格批注样式

范围操作

IXLSRange(经典外观)和 TXLSXRange(XLSX 外观)提供了一组丰富的 范围操作:
  • 合并与取消合并单元格;访问任意单元格的合并区域
  • 复制、移动、插入和删除范围,并控制移动方向
  • 对行或列进行分组与取消分组,以实现大纲/折叠视图
  • 根据单元格内容自动调整行高和列宽
  • 应用内置命名单元格样式(ApplyBuiltinStyle)
  • 多区域选择(TXLSWorksheet.SelectAreas)
  • ForEachCell 迭代回调,用于批量单元格处理

工作表特性

工作表级别的控制包括:
  • 表名、标签颜色、可见性(隐藏 / 深度隐藏)以及基于索引的导航
  • 带逐项权限粒度的工作表保护;工作簿级别保护
  • 冻结窗格、拆分窗格和滚动位置
  • 带条件的自动筛选范围;列表数据验证规则
  • 条件格式:色阶(2 色和 3 色)、数据条和图标集
  • 在工作表范围内查找文本和替换文本
  • 视图选项:网格线颜色、显示公式模式、显示零值、显示标题、 显示从右到左、显示大纲符号以及缩放级别
  • 结构化表格(TXLSTable / TXLSXTable):添加、访问和设置 带标题行和镶边行的 Excel 表格样式
  • 图表:通过 TXLSWorksheetsAddChartSheet 和 TXLSXChart 添加图表工作表和嵌入式图表

超链接与命名范围

通过 IXLSHyperLinks 添加和读取超链接(URL、mailto 以及工作簿内单元格引用)。通过 IXLSNames / TXLSXDefinedNames 在工作簿和工作表作用域定义和解析命名范围。命名范围可用于公式,并可通过 RefersToRange 反向解析为单元格范围

图像与形状

通过 TXLSShapes.AddPicture / TXLSXWorksheet.AddImage 将光栅图像(BMP、JPG、PNG、GIF)嵌入工作表。通过 TXLSShapes.AddTextBox 在经典 XLS 中创建独立文本框。在 BIFF8 绘图中保留 Excel 创建的 OfficeArt 连接器和求解器规则,并通过 TXLSShape.OfficeArtOptions 公开原始形状 FOPT 选项以供专家级绘图工作流使用

页面设置与打印

通过 IXLSPageSetup 全面访问打印布局:
  • 纸张大小(A4、Letter、Legal 以及其他多种;参见 PaperSize)
  • 方向(纵向 / 横向)、边距、水平 / 垂直居中
  • 带 Excel 格式化代码的页眉和页脚字符串(粗体、斜体、页码、日期等; 参见 页眉/页脚格式化代码)
  • 手动水平和垂直分页符
  • 适应页面缩放;缩放百分比;打印区域;打印标题(重复行 / 列)
  • 草稿质量;黑白;打印网格线;打印标题;打印批注

导出格式

将整个工作簿、单个工作表或任意单元格范围导出为:
  • HTML — 完整文档或用于预览或邮件工作流的内联表格片段; 可通过 TXLSHTMLExport 和 TXLSXHtmlExportOptions 控制
  • RTF — 用于文字处理器导入的富文本
  • CSV — 逗号分隔值,支持可配置的分隔符和编码
  • TSV — 制表符分隔值
  • ODS — 通过 lxHandleX 外观的 OpenDocument 电子表格

数据库与网格导出

使用 TDataToXLS 或 TGridToXLS 组件,将任意 TDataSet 兼容数据集或 TDBGrid 直接导出为 Excel、HTML 或 RTF 两个组件都会触发 AfterCell、AfterRow、AfterTitle 和 AfterGroup 事件以实现细粒度输出控制,并支持多级分组字段

VBA 工程保留

HotXLS 在往返启用宏的工作簿时会保留 VBA 工程负载。通过 TXLSVBAProject 和 TXLSVBAModule 提供只读模块检查 调用 IXLSWorkbook.HasVBAProject 检测负载,并使用 LoadVBAProjectFromFile / SaveVBAProjectToFile 在文件之间传递它

Unicode 与国际化文本

所有字符串处理均为 Unicode 原生。HotXLS 可读写以任意语言编写的 Excel 文件, 包括 CJK、阿拉伯语、希伯来语、泰语和其他脚本,并提供正确的双向文本和阅读顺序 支持
Unicode 字符支持示例

数据透视表(经典 XLS)

通过 TXLSWorksheet.AddPivotTable 从来源范围创建数据透视表,配置字段放置和数据字段数字格式,并通过 TXLSWorksheet.PivotTables 检查透视模型 参见 经典 XLS 数据透视表 API 了解字段和筛选器细节

优势

No Office dependency 直接在二进制层面读写 XLS 和 XLSX 文件。无需安装、授权或运行 Microsoft Excel 或 Office。这消除了 COM/OLE 自动化开销,避免了 Office 互操作带来的线程限制,并允许 HotXLS 在无法安装桌面版 Office 的服务器端和服务场景中使用
High performance BIFF8 和 OOXML 解析器使用原生 Object Pascal 编写,热路径上没有中间 XML DOM 分配。包含数十万行的大型工作簿可在低峰值内存下读写。共享字符串去重和共享公式压缩会自动应用,以保持较小的文件大小
OLE migration path 经典外观的 API 表面(工作簿、工作表、范围、字体、边框、内部、页面设置)密切映射 OLE 自动化中熟悉的 Excel 对象模型。这使得迁移现有基于 OLE 的工程变得简单:用 HotXLS 调用替换 COM 调用,移除 Office 依赖,即可获得原生性能
Dual-facade design 旧有 XLS 代码可针对 lxHandle 继续编译和运行而无需更改,同时新 XLSX 代码可使用更丰富的 lxHandleX 外观。一次迁移一种文件格式是安全且渐进的
Formula engine included 内置的多遍计算引擎可处理最常用的工作表函数,而无需 Excel 在打开时重新计算。自定义函数通过 OnUserFunction 回调处理
Easy to use 即插即用的 Delphi 组件(TDataToXLS、TGridToXLS)无需编写代码即可完成常见导出任务。流畅的范围 API 支持 A1 表示法、R1C1 表示法以及从 0 开始的行/列索引
Thread-safe file I/O 由于没有共享的 Office 进程,多个 TXLSXWorkbook 实例可在独立线程上并发创建和保存而无需同步,使 HotXLS 适用于多线程报表生成服务器

兼容性

HotXLS 兼容以下 RAD Studio 版本:
Delphi XE5, XE6, XE7, XE8, 10 Seattle, 10.1 Berlin, 10.2 Tokyo, 10.3 Rio, 10.4 Sydney, 11 Alexandria, 12 Athens, 13 Florence
C++Builder XE5, XE6, XE7, XE8, 10 Seattle, 10.1 Berlin, 10.2 Tokyo, 10.3 Rio, 10.4 Sydney, 11 Alexandria, 12 Athens, 13 Florence
Target platforms Windows 32-bit and 64-bit
Excel file formats XLS (BIFF8, Excel 97–2003), XLSX (OOXML, Excel 2007+), ODS (OpenDocument 1.2)
Export-only formats HTML, RTF, CSV, TSV

另请参见