XLSX Facade 概述 (lxHandleX)
lxHandleX 是用于 Excel 2007+ (.xlsx) 和 OpenDocument Spreadsheet (.ods) 工作簿工作流的专用外观单元。它与原有的 lxHandle 外观共存,以便遗留代码无需任何修改即可继续工作:
lxHandle— primary facade for the Excel 97-2003 BIFF format (.xls), HTML, RTF, CSV, and TSV exports. 所有现有的用户代码继续无缝使用此单元lxHandleX— primary facade for the Excel 2007+ OOXML format (.xlsx)、ODS 读写工作流以及 XLSB 值与样式子集;它提供独立的工作簿和工作表类型、通过Open的自动包检测、SourceFormat、显式输出格式以及TODSExportOptions
类层次结构
XLSX 外观公开了以下类:
type
TXLSXWorkbook = class // top-level workbook with SaveAs / Open
TXLSXHtmlExportOptions = class // HTML document, style, BOM, and table class options
TODSExportOptions = class // ODS export options for generator, chart, and image output
TXLSXSheets = class // worksheet collection on the workbook
TXLSXFonts = class // workbook-level font palette
TXLSXFont = class // single font descriptor
TXLSXFills = class // workbook-level fill palette
TXLSXFill = class // single fill (pattern + fg/bg color)
TXLSXBorders = class // workbook-level border palette
TXLSXBorder = class // four edges + diagonal border
TXLSXNumberFormats = class // workbook-level custom format codes
TXLSXDefinedNames = class // workbook-level named ranges
TXLSXWorksheet = class // single worksheet with cells and decorations
TXLSXStructuralEditRegistry = class // ordered application participants for row and column reference updates
TXLSXCells = class // cell collection on the worksheet
TXLSXCell = class // single cell (value, formula, *Index style refs)
TXLSXRange = class // rectangular worksheet range wrapper
TXLSXMergedCells = class // merged-range collection
TXLSXHyperlinks = class // hyperlink collection
TXLSXComments = class // cell-comment collection
TXLSXImages = class // image collection (drawings + media)
TXLSXConditionalFormats = class // conditional formatting rules
TXLSXDataValidations = class // data-validation rules
TXLSXTables = class // Excel-style table collection
TXLSXCharts = class // chart collection (anchored or full-page)
TXLSXChart = class // single or combination chart with primary, secondary, date, value, and series axes
TXLSXChartPlotGroup = class // ordered chart-family group with its own series and axis pair
TXLSXChartSeries = class // chart series with formula ranges and typed literal caches
TXLSXTextBox = class // standalone worksheet drawing text box
TXLSXRichText = class // per-run rich-text payload for cells
TXLSXAlignment = class // cell alignment / wrap / indent / rotation
TXLSXExternalLinks = class // external workbook link collection
TXLSXExternalLink = class // single external workbook reference (Target URL + SheetNames)
TXLSConnections = class // external data connection collection
TXLSConnection = class // database, web, text, and refresh connection metadata
TXLSQueryTables = class // worksheet query-result collection
TXLSQueryTable = class // query ownership, fields, and result binding
These classes are independent of lxHandle.TXLSWorkBook and
lxHandle.TXLSWorksheet. Applications that need both formats may
use both facades side by side:
uses
lxHandle, // XLS / HTML / RTF / CSV workbook (TXLSWorkBook)
lxHandleX; // XLSX workbook (TXLSXWorkbook)
快速入门
The XLSX facade follows the same call-shape conventions as the BIFF
facade — SaveAs / Open on the workbook,
Sheets.Add / Sheets[i] on the worksheet
collection, and Cells.Item[Row, Col].Value 在单元格集合上使用;下面的示例写出一个覆盖当前全部已支持特性的小工作簿:
uses lxHandleX;
var
wb: TXLSXWorkbook;
ws: TXLSXWorksheet;
bold, yellow, box, currency: Integer;
begin
wb := TXLSXWorkbook.Create;
try
bold := wb.Fonts.Add('Calibri', 12, True, False);
yellow := wb.Fills.AddSolid($FFFFFF00);
box := wb.Borders.AddBox(xlsxBorderThin);
currency := wb.NumberFormats.Add('"$"#,##0.00');
ws := wb.Sheets.Add('Demo');
ws.Cells.Item[1, 1].Value := 'Hello';
ws.Cells.Item[1, 1].FontIndex := bold + 1;
ws.Cells.Item[1, 2].Value := 123.45;
ws.Cells.Item[1, 2].NumberFormatIndex := currency + 1;
ws.Cells.Item[2, 1].Value := Now; // tagged as date
ws.Cells.Item[2, 2].Formula := 'SUM(B1:B1)';
ws.Cells.Item[3, 1].FillIndex := yellow + 1; // highlight cell
ws.Cells.Item[3, 2].BorderIndex := box + 1; // boxed cell
ws.ColWidth[1] := 24;
ws.RowHeight[1] := 28;
ws.MergeCells(4, 1, 4, 3);
ws.Range['A8:C10'].Merge(True); // merge across rows
ws.AddHyperlink(5, 1, 'https://www.loslab.com', 'Visit losLab');
ws.AddComment(5, 2, 'Important note', 'Kevin');
ws.AddImageFromFile(6, 1, 'logo.png');
ws.AddConditionalFormat('B1:B10', xlsxCfOpGreaterThan, '100');
ws.AddListValidation('C1:C5', 'Yes,No,Maybe');
wb.DefinedNames.Add('SalesData', 'Demo!$A$1:$B$10');
wb.SaveAs('demo.xlsx');
finally
wb.Free;
end;
end;
支持的功能
- 单元格值:数字、布尔值、字符串、日期、公式
- 具有写入路径去重的共享字符串表 (
xl/sharedStrings.xml) - 工作簿级样式调色板 —
Workbook.Fonts、Fills、Borders和NumberFormats— 以及逐单元格的FontIndex/FillIndex/BorderIndex/NumberFormatIndex。SaveAs 发射真实的<fonts>/<fills>/<borders>/<numFmts>+<cellXfs>块;Open 将其解析回来,因此名称/大小/加粗/倾斜/颜色、填充图案、边框边缘和自定义数字格式都在往返中幸存 - 通过
Worksheet.ColWidth[Col]设置每列宽度,通过Worksheet.RowHeight[Row]设置每行高度(工作表<cols>块和每个<row>的ht属性) - 索引
XlsxXfIndexDate处的内置日期cellXf;自动标记TDateTime值 - 合并单元格 (
<mergeCells>),包括用于跨行 Excel 样式合并的TXLSXRange.Merge(True) - 通过
Worksheet.Range、RCRange、UsedRange、EntireRow和EntireColumn获取的工作表区域。参见 TXLSXRange 了解批量值、公式、SetArrayFormula、样式索引、数字格式、边框、保护标志、自动适应、合并、偏移、调整大小、Sort多键排序、ApplyBuiltinStyle内置单元格样式、复制/移动助手、整行/整列插入/删除助手以及选定区域 HTML 导出 - 由每个工作表的外部 URL 关系支持的超链接 (
<hyperlinks>) - 带有 VML 绘图 (
xl/commentsN.xml+xl/drawings/vmlDrawingN.vml) 的单元格批注,以便在 Excel 中渲染气泡 - 通过
Worksheet.Images嵌入的图片(PNG / JPEG / GIF / BMP),写入xl/media/imageN.<ext>以及每个工作表的绘图 XML 和关系 - 通过
Worksheet.AddTextBox获取的独立绘图文本框,写入为包含文本主体的工作表绘图形状而非单元格批注,带有直接锚点查找和区域删除助手 - 通过
Workbook.DefinedNames获取的工作簿级命名区域(通过SheetIndex限制工作簿作用域或工作表作用域) - 通过
Workbook.Calculate和Worksheet.Calculate进行公式计算,共享 XLS 公式解析器和评估器以处理前导等号公式、单元格和区域引用、引用的公式单元格、跨表引用、定义名称区域,以及支持 of 文本、日期、工作日、工程/进制转换、位运算、统计、聚合和数学函数;使用Workbook.OnUserFunction或Workbook.OnUserFunctionEx来解析自定义或不支持的函数 - 每个工作表的条件格式 (
Worksheet.ConditionalFormats) 和数据验证 (Worksheet.DataValidations),包括下拉AddListValidation(Range, Items)快捷方式 - 行 / 列大纲组 (
RowOutlineLevel、ColOutlineLevel)、隐藏状态 (RowHidden、ColHidden) 和折叠组状态 (RowCollapsed、ColCollapsed) - 通过
Worksheet.FreezePanes(Row, Col)实现冻结窗格 - 页面设置 — 六个页边距属性、纸张大小、方向、页面缩放、适应宽度 / 适应高度,以及
HeaderText/FooterText。可以将命名的xlsxPaper*常量(例如xlsxPaperLetter、xlsxPaperA4、xlsxPaperA3和xlsxPaperLegal)分配给PaperSize - 自动筛选 (
Worksheet.SetAutoFilter) - 具有样式信息和 tableColumns 的 Excel 样式表 (TXLSXTable)
外观子集合 API
门面集合类管理条件格式、数据验证、命名区域、图片和表。各集合的核心成员如下:
- TXLSXConditionalFormats:
公开条件格式规则
属性:
Count方法:AddAboveAverage、AddColorScale2、AddColorScale3、AddDataBar、AddExisting、AddExpression、AddIconSet、AddSimpleRule、AddTextRule、AddTop10、DeleteAt、DeleteInRange、FindAt、IndexOfCell - TXLSXDataValidations:
公开数据验证
属性:
Count方法:AddExisting、AddList、DeleteAt、DeleteInRange、FindAt、IndexOfCell - TXLSXDefinedNames:
公开定义名称(命名区域)
属性:
Count方法:DeleteByName、FindByName、IndexOfName - TXLSXImages:
公开嵌入图像
属性:
Count方法:DeleteAt、DeleteInRange、FindAt、IndexOfCell - TXLSXTables:
公开 Excel 数据表
属性:
Count方法:AddExisting、DeleteByName、FindByName、IndexOfName - TXLSConnections:通过
Workbook.Connections暴露工作簿外部数据连接。属性:Count。方法:Add、AddExisting、FindById、FindByName、NextId、Validate - TXLSQueryTables:通过
Worksheet.QueryTables暴露工作表查询结果定义。属性:Count。方法:Add、AddExisting、FindByName、FindByResultTableName、Validate
支持的功能
- 写入
docProps/core.xml+docProps/app.xml的文档属性 (Workbook.Title、Author、Subject、Keywords、Description、LastModifiedBy、Company等) - 通过
Worksheet.Protect/Workbook.ProtectWorkbook实现的工作表 / 工作簿密码保护(传统的 16 位哈希);通过SaveAsEncrypted实现兼容 Excel 的 AES 密码保护保存,可用时使用 AES-NI 加速,否则使用便携式软件回退。在解密支持落地之前,对加密包调用OpenEncrypted仍会抛出异常 - 通过
Workbook.LoadVbaProjectFromFile/VbaProject保留 VBA 项目;字节往返保持不变。有效的vbaProject.bin负载也可以通过Workbook.ParsedVBAProject进行检查 - 通过 TXLSXChart 实现图表 — 柱形图 / 条形图 / 折线图 / 饼图 / 面积图 / 圆环图,锚定在工作表上 (
Worksheet.AddChart) 或通过Workbook.AddChartSheet(Name, Type, Title)全页显示在专用的图表工作表上 - 通过具有按运行字体格式的 TXLSXRichText 实现富文本单元格;通过共享字符串表进行往返
- 通过
Worksheet.AddHyperlinkToCell(Row, Col, "Sheet2!A1")实现的内部超链接锚点(不需要 rels 关系) - 工作表上的单元格区域复制 / 移动 / 清除 API (
CopyRange,CopyRangeTo,MoveRange,ClearRange) - 通过 TXLSXAlignment +
AlignmentIndex实现的单元格对齐 - 通过
Worksheet.TabColor/TabColorIsAuto实现的工作表标签颜色 - 通过
Worksheet.View实现的工作表视图模式,包括普通视图、分页符预览和页面布局视图 - 流式 SaveAs 路径 (
Workbook.StreamingWrite := True),在不将其他工作表保留在内存中的情况下构建并写入每个工作表;逐行 XML 累加器使用TXLSWideStringBuilder以使单元格循环保持线性 - 除加密的 XLSX 包和图表工作表识别(回退到已记录的部分行为)之外,对上述所有内容的往返
Open支持 - 基于流的导出和导入:
SaveAs(Stream),用于内存中或 BLOB 字段使用的Open(Stream) - OpenDocument Spreadsheet 读写:
Workbook.OpenODS和通用Workbook.Open可以加载.ods包,而Workbook.SaveAsODS和SaveAs(..., xlsxOpenDocumentSpreadsheet)直接写入 ODS 输出。该格式涵盖支持的往返过程中的值、公式、样式、富文本、行/列尺寸、合并、超链接、图像、图表、命名区域、自动筛选、条件格式、数据验证、冻结窗格、页面设置、页眉/页脚、打印范围、分页符、大纲组、标签颜色和工作表可见性 - ODS 导出选项:将
TODSExportOptions传递给SaveAsODS以覆盖文档生成器字符串,或在生成较小包时抑制图表和图像部分 - 分隔文本导入:
Workbook.OpenCSV(FileName)和Workbook.OpenCSV(Stream)导入具有分隔符嗅探、BOM 编码检测、RFC 4180 样式引号和可选值类型推断的 CSV 或 TSV 数据。Open(FileName)会自动将.csv和.tsv文件路由到导入器 - 工作簿元数据扫描:
Workbook.GetSheetNames(FileName, List)和Workbook.GetSheetNames(Stream, List)从xl/workbook.xml中读取有序的工作表名称,而无需加载工作表 XML - 单元格保护:
TXLSXCell.Locked和FormulaHidden—— 控制在保护工作表时哪些单元格是可编辑的,或者哪些单元格的公式是可见的 - 根据单元格内容自动适应列宽和行高:
Worksheet.AutoFitColumn、AutoFitColumns、AutoFitRow、AutoFitRows - 带有完整级联的行/列插入和删除:
InsertRows、DeleteRows、InsertCols、DeleteCols。副作用传播到单元格、合并区域、超链接、批注、冻结窗格、区域字符串引用、数据表、单元格公式、条件格式 / 数据验证公式、内部超链接目标、打印设置引用、手动分页符、自动筛选列条件、图表序列范围、定义名称、图片锚点和图表锚点 - 扩展的页面设置:
PrintArea、PrintTitleRows、PrintTitleCols、PrintGridlines、PrintHeadings、BlackAndWhite、Draft、PrintNotes、PrintOverThenDown - 通过
PrinterDriverData、HasPrinterDriverData和ClearPrinterDriverData访问不透明的打印机驱动负载;字节数组和工作表副本各自独立拥有所有权,负载上限为 1 MiB,清除操作会移除工作表关系和二进制包部件而不替换类型化的页面设置字段;加载只绑定具有所需关系类型且目标存在的精确pageSetup关系标识,缺失、类型错误或悬空引用会发出xlsDiagnosticPrinterSettingsRelationshipInvalid,而不会借用其他二进制部件 - 通过
RenderCalibration、CaptureRenderCalibration和ResetRenderCalibration提供工作簿本地的渲染校准,支持经过校验的整记录赋值,以及针对宽度、高度、行距、单元格边距、屏幕缩放和测量 DPI 的独立操作快照 - 通过
CreateRenderGeometry提供操作专属的几何与字体测量,具备不可变校准值和工作簿生成标识、完整的字体与换行感知缓存键、有界本地缓存,以及共享的像素、点、列宽、MDW 和可用单元格宽度换算 - AutoFit 每次操作捕获一个工作簿本地的几何快照,并使用校准后的间距和边距测量可见单元格字体和换行文本;分页每次构建捕获独立的快照,在下一次构建之前保持既有逻辑页不变,且从不写入工作表尺寸
- 工作表可见性:
Worksheet.Visibility(xlsxSheetVisible/xlsxSheetHidden/xlsxSheetVeryHidden) 以及IsSelected - 手动分页符:
AddRowBreak、AddColBreak、索引查找和区域删除助手 - 自动筛选列条件:带有单个或 AND/OR 双条件筛选规则的
Worksheet.AddAutoFilterColumn,以及用于直接条件查找和删除的Worksheet.AutoFilterColumns.FindByColId和DeleteByColId(TXLSXAutoFilterColumn) - 工作簿日期基准:
Workbook.Date1904在 1900(Windows 默认)和 1904(Mac)日期纪元之间切换 - 对角线边框:
TXLSXBorder.DiagonalUp和DiagonalDown启用对角线;Diagonal边缘承载样式和颜色 - 扩展字体属性:
TXLSXFont.VertAlign(上标 / 下标)、OutlineFont、Shadow、Family、CharSet - 命名区域元数据:
TXLSXDefinedName.Hidden和Comment - 工作表视图选项:
Worksheet.Zoom、DisplayGridLines、DisplayZeros、DisplayRightToLeft、StandardWidth、StandardHeight - OOXML 传统索引颜色调色板:具有
ResetIndexedColors的Workbook.IndexedColor[0..63] - 外部工作簿链接:
Workbook.ExternalLinks/ TXLSXExternalLink — 目标 URL + SheetNames 元数据往返 - 外部数据连接和查询结果:
Workbook.Connections/Worksheet.QueryTables—— 类型化的刷新、凭据、命令、Web、文本、参数、字段、表格和已定义名称绑定,并支持扩展安全的 Roundtrip - 对
TXLSXFont、TXLSXFill和TXLSXBorderEdge的主题颜色支持:具有优先级顺序的ColorTheme/ColorIndex/TintAndShade属性(主题 > 索引 > RGB) - 通过
SaveXLSXWorkbookAsXLS的文件和流重载进行 BIFF8 转换,带有确定性的 56 色调色板方案;保留工作簿样式已使用的索引槽位,当直接颜色超出可用槽位时采用加权 OKLab 量化;稀疏的已加载单元格遍历,以及在 XLS 网格之外的行或列会被预检拒绝;类型化打印字段和不透明打印机数据独立转换,BIFF8 边界在写入目标流之前检查,标准字段优先于重复的私有默认值,OOXML 专属的UsePrinterDefaults标志不会被合成到经典 XLS 中 - CSV 导出:
Workbook.SaveAsCSV— 4 个重载(文件名或流 × 活动工作表 / 显式 SheetIndex + 分隔符),带 BOM 的 UTF-8,RFC 4180 引号 - HTML 导出:
Workbook.SaveAsHTML和TXLSXRange.SaveAsHTML为整个工作簿工作表或仅选定矩形写入 HTML5 表。选项重载接受用于完整文档输出、样式发射、BOM 发射和表类命名的TXLSXHtmlExportOptions - RTF 导出:
Workbook.SaveAsRTF— 4 个重载,带列宽的 RTF 1.6 表、逐单元格字体格式,以及通过有符号 16 位\uN?转义的完整 BMP unicode
共享基础架构
两个外观共享一组相同的底层助手单元,这意味着样式描述符、哈希表、AVL 树、ZIP 和 XML I/O、RGB 到 HLS 转换以及字符串构建器只需编写一次即可供任一路径使用。共享助手包括:
lxStyleXf、lxStyleFont、lxStyleColor、lxStyleFill、lxStyleBorder— 现代样式描述符lxRgb— RGB / HLS 颜色转换lxHashTable、lxKeyList、lxAvlTree、lxCols、lxRows— 去重容器和基于 AVL 的单元格堆构建块lxXmlReader、lxXmlWriter、lxZipArchive— OOXML 传输层lxStrBuilder、lxCacheStream、lxWStream、lxZlibStream— 流和字符串汇编助手