HotXLS Release Notes
本节内容已按中文文档说明
最新发布
- 最新版本: 2.384.120; 发布日期: 2026-10-09
版本 2.384.120
新增
- 可移植的经典 XLS 捕获支持常见的柱形图、条形图、折线图、散点图、饼图、圆环图和单系列面积图,带已校验的本地存储值、核心外观,以及由调用方声明的绘图区、标题和图例边界
- 只读的图表外观声明会保留工作表和图表标识、显式边框尺寸、有效的图例点数尺寸和原生字体几何信息,供独立的 PDF、SVG 和 PNG 输出使用
- 有界的辅助方法可以检查简单的存储公式引用和已缓存的图表单元格,既不求值公式,也不展开稀疏单元格
修复
- 经典图表捕获会保留带小数的存储字体和数据标记尺寸、源所有权和读取租约,并在输出前拒绝畸形记录、无法解析的外观和资源预算耗尽的情况
- 图表双精度属性更新在比较或修改之前就拒绝非有限值
- 捕获期间反复初始化原生可移植单元格时,会释放之前托管的字符串
版本 2.384.119
修复
- 经典图表检查会在应用类型化状态之前校验存储的系列文本、趋势线名称和数据标签分隔符,畸形文本抛出错误时释放未完成的部分模型
- 压缩 Unicode 的数据标签分隔符保留完整的存储字符
版本 2.384.118
新增
- 经典图表检查以磅为单位暴露数据标记直径,包括带小数的尺寸,同时保留原始存储单位
修复
- 受支持的原生经典图表填充表会在复杂条目之后继续解码属性,畸形填充表则保留之前的类型化填充
版本 2.384.117
新增
- 显式字节编码辅助方法保留内嵌的 null 字符,并拒绝所选代码页无法表示的文本
更改
- 经典 BIFF5 的文本、公式和工作簿元数据在 Windows、Linux 和 macOS 上按声明的编码处理,字节长度按编码后计算,字符边界保持完整
- 受支持的旧图表文本在代码页编辑和复制后保留原始解码结果,改用其他编码保存前会显式转码
修复
- 压缩 BIFF8 Unicode 保留精确的编码单元,旧式自定义样式、图表文本和双字节公式缓存延续记录按其实际记录布局解析
- 原生 Unicode 文本计算、条件、查找键、本地公式绑定以及经典搜索替换都保留受支持的大小写匹配
- 命名样式查找会解析第一个存储条目,不再把它误判为不存在的名称
- 重复读取 ZIP 条目会释放先前的头部元数据,同时保留存储型与压缩型流并发的行为
版本 2.384.116
新增
- 本地 SUM 计算数据透视字段基于叶节点、小计和总计上下文的求和来求值公式,包括未出现在显示度量中的依赖
- 缓存持有的计算项在受支持的未分组字符串成员字段上保留原生成员标识、隐藏依赖和全局求解顺序
- 受支持的计算项显示计算和聚合筛选保留可见成员顺序、原始筛选顺序以及无歧义的显示度量标识
修复
- 原生数据透视公式日期投影在缓存导入、克隆和计算全程保留工作簿日期系统
- 缺失项缓存清理在两种工作簿日期系统和旧版已保存报表中都保留已校验的物化报表所有权
- 不受支持的计算数据透视元数据和已编辑的原生输出会在改动工作表结果之前被拒绝
版本 2.384.115
新增
- 原生可移植 PDF、SVG 和 PNG 输出支持富文本、建模形状、普通图片、单元格内图片、布尔复选框,以及七类受支持的缓存 XLSX 图表
- 不可变的工作簿打印计划在 Linux 和 macOS 上应用完整的打印区域、重复的行列标题、分页符、纸张设置、页边距、方向、居中、缩放和页面顺序
- 显式原生字体几何信息支持带生成校验的捕获,且不改动工作簿的几何提供者
修复
- 适应页面模式在工作簿多次保存往返后仍然生效,并忽略过期的百分比缩放,包括不受限的适应尺寸
- 受支持的图表标题字体、线条外观、数据标记填充和边框保留显式导入和显式设置的值,包括黑色
- 富文本保留显式的 false 覆盖,并在字符串复用和语义比较时区分生效的文本段外观
版本 2.384.114
新增
- 原生 Linux x64 和 macOS ARM64 应用可以加载、编辑、计算和保存经典 BIFF8 工作簿,包括受支持的文档属性和 RC4 加密
- 可移植复合存储支持嵌套作用域、大型链式 DIFAT 容器、元数据,以及显式的原生存储接口所有权
修复
- 128 位 CryptoAPI 工作簿会声明兼容的加密提供程序,并保留可读的明文文档属性
- 原生文档时间戳使用正确的 FILETIME 纪元,跨平台保留 UTC 值
- 经典定义名称在作用域查找、公式和工作簿重新打开之间共享规范的 Unicode 标识
- 转义的日期格式分隔符和内嵌的带引号字面量保留所选的完整日期格式
版本 2.384.113
新增
- 区域清除和 Unicode 文本粘贴支持有界的原子撤销与重做,带保护和结构预检
- 类型化的本地单元格内图片和复选框格式支持 XLSX 往返、无障碍元数据和具备所有权感知的内容编辑
- 稀疏的行、列复选框格式在编辑和 XLSX 往返中保留优先级、显式清除和缺失单元格
- XLSB 支持扩展到公式和缓存、名称、合并、超链接、窗格、表格和筛选
- 原生 Linux x64 和 macOS ARM64 工作簿 API 可以加载、编辑、计算和保存受支持的 XLSX、XLSB 和 ODS 文件
- 原生数据透视输出支持数值、日期和手动分组,以及全部 11 种自定义小计函数
修复
- 带作用域的名称在 Windows、Linux 和 macOS 上采用一致的 Unicode 规范化和大小写匹配,不丢弃重音符号或特殊符号
- 现代聚合公式在 Windows 上与 Free Pascal 编译结果一致
- 打开另一个工作簿会替换命名样式,而不是沿用上一个文件的样式定义
- 现代图片和控件内容在区域撤销和保存后完好无损,且不会物化缺失单元格
- 导入的公式缓存保留原始值元数据,普通元数据与单元格内图片内容可以区分
- 语义比较通过有界的稀疏遍历区分本地图片内容、无障碍元数据和生效的继承控件格式
版本 2.384.112
新增
- 正则表达式测试、提取和替换在 Windows、Linux x64 和 macOS ARM64 上支持 UTF-16 文本、捕获组、数组广播和有界求值
- GROUPBY 和 PIVOTBY 支持带作用域的聚合回调、多个度量、表头、筛选、层级汇总、排序和相对百分比
修复
- 标量 SUM 参数保留布尔和数字文本的强制转换,区域和数组聚合则维持原有的忽略规则
- 带作用域的布尔字面量和聚合回调公式经未来函数存储和工作簿重新打开后依然有效
版本 2.384.111
新增
- 原生本地数据透视输出支持基准项差异和百分比、累计汇总、行百分比和列百分比、指数、父级百分比、累计百分比和密集排名
修复
- 显示计算保留原生的总计、缺失值、零除数和已排序成员语义,包括不可加的平均值
- 扩展显示模式和基准字段标识在保存、重新打开和显式 Excel 刷新后依然保留
版本 2.384.110
新增
- 原生本地数据透视输出支持紧凑、表格和大纲布局、重复的祖先标签、默认小计位置,以及任一数据轴上的多个度量
修复
- 重复标签设置经导入的命名空间别名以及保存/重新打开后依然保留,原生输出还能区分缺失交集与数值零
- Excel 显式刷新生成的报表时,分阶段写入的布局元数据让字段和数据字段的标题保持一致
版本 2.384.109
新增
- 工作簿比较能区分类型化值和精确大整数,支持有限的数值容差,以及可选的存储公式缓存、样式和几何比较
- 有界语义比较覆盖受支持的名称、规则、表格、绘制顺序、空白样式区域、生效的富文本段、本地数据透视模型、Slicer 选择和 Timeline 状态
更改
- 比较保留压缩存储和缺失单元格,把资源标识解析为有效值,遇到不支持的模型或资源耗尽时保留上一次成功的结果
修复
- 类型化数据库 REAL 参数的精度校验可在 Delphi XE5 下编译,同时保留精确值、溢出和 null 检查
版本 2.384.108
新增
- ODS 往返保留普通批注文本和作者、可表示的值筛选和自定义筛选、显式单元格保护,以及等价的无密码工作表保护
- 转换报告在工作表复制和后续保存后仍保留精确的元数据损失记录,包括不支持的筛选表达式和非等价的保护
修复
- 取消或失败的 ODS 流式保存通过有界的临时文件暂存保留目标字节、大小和位置
- 从非零流位置开始且最终成功的 ODS 保存会保留前缀内容并校正 ZIP 条目偏移
版本 2.384.107
新增
- 存储公式检查和引用感知的数据透视聚合公式可用于经典 XLS、XLSX、只读和隔离求值上下文,包括可用的数组结果和类型化错误
- 数据透视聚合查询通过有界的独立缓存求值遵循建模的可见成员、报表筛选和受支持的小计,不刷新源数据
修复
- 原生 Excel XLS 数据透视缓存保留连续的内联数值和当前缓存有效性元数据,不再返回错误的重复值总计
- 数据透视引用包含主表位置上方的建模报表筛选区域
版本 2.384.106
新增
- 自动数据库查询按位置顺序绑定类型化的字面量和存储单元格参数,正确保留 Unicode、空文本、零、布尔值、日期和 null,不把值替换进 SQL 文本
- 单元格参数读取可用的公式缓存和紧凑存储值,不重算也不物化,带有界元数据校验和事务性结果应用
修复
- Jet 和 ACE 日期参数通过类型化的 OLE DATE 绑定保留 DATE、TIME 和 TIMESTAMP 值,不受依赖区域设置的时间戳投影影响
版本 2.384.105
新增
- 公式元数据可在 XLS 和 XLSX 求值上下文中读取实际被引用文件的标识、受支持的基础数字格式、负数颜色、正数括号、文本对齐、锁定状态、列宽和计算模式
- 独立的基础样式和稀疏轴足迹检查保留普通存储和压缩存储的单元格、工作表默认值、主题颜色和借用的工作簿所有权
更改
- 列宽元数据以两列数组返回舍入后的字符宽度和默认宽度标志;拿不到 Excel 应用环境信息、遇到无法分类的格式时会报告显式错误
版本 2.384.104
新增
- 导入校验支持严格的标量类型、数值和日期边界、显式 Excel 日期系统、复合唯一性和跨列关系
- 结构化违规报告会指明工作表、单元格、规则、相关列和第一条重复行;存储值校验保留压缩单元格,公式缓存不可用时报告出来而不隐式重算
版本 2.384.103
新增
- 自动文本查询刷新定宽文件时使用声明的字段起点、受支持的字符编码、类型化字段转换、跳过的字段,以及表头或首行选择
- 定宽刷新保留字面引号、修剪字段填充,并在应用工作表更改前拒绝无效边界、超大输入和取消请求
版本 2.384.102
更改
- 经典公式符号审计扫描更快,同时保留函数和名称发现结果、大小写不敏感去重、作用域和发现顺序
修复
- 在受支持的文件系统上,Windows 工作簿保存、直接包修补、PDF 输出和页面图像输出可以原子替换被 delete-sharing 元数据或读取句柄占用的现有文件,同时保留锁检查和只读保护;在不受支持的文件系统上则走旧路径
版本 2.384.101
新增
- INDEX 区域选择器数组与行列选择器一起在计算数组和受支持的同表引用并集上广播,保留方向、所选值类型和各自的错误
- 定义名称和 LET 绑定保留受支持的多区域引用标识,标量 CHOOSE 保留所选引用供下游计算
修复
- INDEX 对计算源接受显式的区域参数 1,并能区分无效、缺失、带小数和超范围的区域选择器
- 跨表并集和计算数组并集按受支持的错误契约拒绝,不再获得错误的引用标识
- 由现有本地工作表限定的无效引用,在直接公式和定义名称(包括带引号的表名)中保留其引用错误,不改动公式字符串,也不把未知限定符当作本地工作表
版本 2.384.100
新增
- Linux 上的可移植无头 PDF、SVG 和 PNG 输出,带显式字体文件、原生文本整形、有界资源和分阶段的独占文件发布
- Windows 上把受支持的经典 XLS 和 XLSX 矩形区域只读捕获为不可变、可转移的快照,包括存储的公式结果、带作用域的 Table 和条件外观、物理尺寸和完整合并
修复
- 可移植外观校验在各优化编译构建下一致拒绝无效的枚举表示
版本 2.384.99
新增
- 为受支持的 Windows Text、ADO、ODBC 和 Web 连接提供显式的自动查询刷新,带自定义 provider 注册和有界结果
修复
- 原生查询结果关系和列标识在受支持的基于表格或独立保存与重新打开后持续保留
- 无效的 provider 连接类型在分发前拒绝,不改动工作表结果
版本 2.384.98
新增
- 本地数据透视 Timeline 创建、共享视图连接、包含整天的筛选,以及带保护的清除选择或保留选择的移除
- 显式的原生 Slicer 无数据项刷新可跨连接视图进行,带累计资源限制、取消支持,并保留选择和项标识
修复
- 原生 Timeline 关系和筛选所有权处理在物化、保存和重新打开全程保留受支持的导入选择
- 数据透视 Slicer 交叉筛选设置通过其原生表格化表示持久保留
- Timeline 发现在 Open XML 加载期间保留 UTF-16 工作簿和链接部件解码
版本 2.384.97
新增
- 标量和计算数组定义名称可用于受支持的数值与计数聚合计算,带原生强制转换、依赖跟踪和资源限制
修复
- 数值聚合会传播来自本地工作表引用的类型化错误,空平均值返回除零错误,失败的定义名称引用保留自身错误而不重启已部分完成的遍历
版本 2.384.96
新增
- 文本连接以及受支持的中位数、顺序统计量、百分位数、四分位数、百分比排名、多重众数和总体协方差计算支持计算数组参数
更改
- 数组和引用收集保留原生标量强制转换、类型化错误、原始协方差配对和计算资源限制
修复
- 有限中位数的中点计算避免同号溢出,排除式百分位数接受有效的端点和单元素排名
版本 2.384.95
新增
- 事务性原生紧凑数据透视报表输出,带同步的工作表值、布局元数据和持久化的单元格所有权
- 在其他活动筛选之下跨连接视图的只读 Slicer 成员可用性
- 显式的历史数据透视缓存成员清理,带可配置保留策略和协调的关联选择重映射
更改
- 受支持的原生数据透视输出保留当前手动筛选和标题,并在改动之前拒绝不支持的布局或已编辑的自有单元格
版本 2.384.94
新增
- 共享缓存的数据透视表视图,以及带显式工作表边界的本地数据透视 Slicer 创建
- 事务性 Slicer 移除:要么清除其限制,要么把选择保留为普通数据透视筛选,包括未来成员策略
- 固定数值、日期和离散分组缓存的重建,成员标识保持稳定
- 使用精确成员和聚合标识的独立原生紧凑数据透视布局元数据预览
修复
- 重新打开已含数据的工作簿现在会替换之前的类型化数据透视缓存,创作出的原生 Slicer 链接仍被 Excel 识别
- 分组缓存序列化保留声明的原生成员域以及官方的总计和数据轴属性
版本 2.384.93
新增
- 经过校验的 XLSB 读取器和写入器,支持类型化单元格值、基本样式、普通工作表视图和尺寸
- 工作簿文件和流保存可显式输出二进制格式,带自动二进制输入检测和转换保真度报告
更改
- XLSB 转换先暂存完整包,在输出前拒绝不支持的功能或计算设置,包括未检查或允许损失的保存
修复
- 配置的 ZIP 压缩级别在 deflate 压缩器初始化之前应用
版本 2.384.92
新增
- 针对受支持的本地定义名称和表格源,提供事务性数据透视缓存刷新和安全的工作表物化
- 工作表作用域的定义名称查找,以及由调用方解析的缓存刷新源边界
修复
- 本地源标识和定义名称作用域在工作表移动和重命名后保持不变,包括带引号和 Unicode 的名称
- 定义名称公式 XML 省略可选的前导等号,该等号只有内存公式语法才需要
- 表格总计成员关系遵循实际的总计行数,只有总计 UI 提示时保留全部数据行
版本 2.384.91
新增
- 转置、矩阵乘法、行列式和矩阵求逆支持计算数组输入和类型化结果
- 行列选择支持有序选择向量、重复项和负索引
- 计算查找向量和数组值查找请求,包括完整的标量查找切片和类型化回退值
更改
- 矩阵运算、查找扫描、选择器遍历、复制和填充在组合使用时遵守求值步数和数组内存限制
修复
- 公式和数组结果的文本缓存在重算之前就能在 Excel 中正确显示
- 现代富错误缓存包含原生缓存显示所需的工作簿版本和计算功能声明
- 查找和展平选项在数值收窄前拒绝超范围值,带小数的选项遵循原生截断
- 空的 take、drop 和 flatten 结果保留其类型化计算错误
版本 2.384.90
新增
- 隔离的数据透视结果预览保留共享 Slicer 选择和调用方筛选,不改动活动计算缓存
- 针对受支持的本地数据透视源的安全工作表物化:暂存结果、拒绝冲突的内容和结构,并保留现有单元格对象、格式和批注
- 精确的类型化值所有权在 XLSX 保存和重新打开后保持不变,可安全调整结果大小、移动结果,并显式采纳现有标量数据透视值
修复
- 删除最后一个绑定的数据透视 Slicer 视图时,会在移除其绘图、缓存、保留名称或选择之前被拒绝
- 清除 Slicer 视图会在改动前校验每个受影响的缓存,并把允许清理的视图、绘图和未绑定缓存一并清掉
版本 2.384.89
新增
- INDEX 接受数组值的行列选择器,可作用于计算数组和工作表区域,包括成对选择和行列叉积
修复
- 选择器结果保留类型化值和错误,缺失的选择器位置用 #N/A 填充,并遵守计算内存和求值步数限制
- 截断为零的带小数标量选择器会产生完整的行或列 spill,负数选择器在截断前返回 #VALUE!
- 标量区域选择保留引用行为;选择器 spill 能从阻挡中恢复、调整大小,并在保存和重新打开后重算
版本 2.384.88
新增
- 针对受支持的导入型非 OLAP 数据透视 Slicer 缓存,提供类型化成员检查、共享成员选择和清除
- 连接的数据透视表计算把 Slicer 选择与其他字段上的独立限制以及调用方提供的记录筛选取交集
更改
- 选择变更在提交前校验每个连接和成员,拒绝有歧义的导入同字段掩码,并保留不支持的缓存表示
- Slicer 缓存集合变更在影响连接的数据透视表计算时遵守工作簿写保护
- 删除已绑定的非 OLAP 数据透视 Slicer 缓存会被原子拒绝,以保持运行时和已保存筛选状态的一致
修复
- 编辑后的数据透视 Slicer 选择和连接视图成员掩码一起保存,同时保留导入的命名空间和未知扩展
- 受支持的 Slicer 连接遵循已保存的工作表标识,并独立于普通工作簿缓存标识解析扩展缓存标识符
- 工作表重新排序后,导入的数据透视表定义仍与其原始视图关联
版本 2.384.87
更改
- 本地矩形数据透视缓存刷新保留现有字段和成员标识、追加新的类型化成员,并且在源重排、移除或重新引入之后,共享视图的筛选和选择仍绑定原始成员
- 源表头按名称匹配数据库字段,允许列重排;计算字段保留自己的公式,并收到新的空记录占位符供后续求值
- 刷新在更新缓存之前校验并暂存完整源,拒绝不支持的架构、源类型、派生分组和新的未映射离散组成员,不留下部分改动
修复
- 数据透视错误值在共享项和记录中经 XLSX 保存和重新打开后保留其类型和代码
- 刷新后的共享项域会重新计算类型标志和可表示边界,XLSX 缓存元数据准确描述混合值、日期、错误、布尔值和空白
- 源刷新读取缺失单元格时不创建工作表单元格,比较 Unicode 字段表头时不收窄文本
- 保存的已刷新数据透视表视图把新缓存成员放在小计项之前,同时保留现有成员顺序、隐藏标志和导入的布局扩展
- 视图顺序与缓存顺序不一致时页字段选择仍绑定正确成员;计算字段不再挪动已保存的源记录;刷新时间戳使用数值型 XLSX 表示
版本 2.384.86
新增
- INDEX 接受计算数组和常量,支持标量选择、完整数组选择和行或列提取,同时对区域源保留引用行为
- SORT 和 UNIQUE 接受计算数组和常量,可与 FILTER、SEQUENCE、LET 等产出数组的表达式直接组合
更改
- 组合出的数组表达式保留自动 XLSX spill 调整大小、固定区域数组计算、类型化错误,以及保存并重新打开后的重算
修复
- 数组选择和排序截断带小数的数值选项,无效的布尔选项文本返回 #VALUE!,计算数组操作遵守内存和求值步数限制
版本 2.384.85
新增
- XLSX 动态数组现在会计算到自动调整大小的 spill 区域,遇到用户阻挡时报 #SPILL!,支持 spill 引用和显式隐式交集,重新打开后还能恢复缓存的 spill 所有权
- 转换预检报告已知的目标格式损失,带检查的保存可以在写入现有文件或流之前拒绝这些损失
- 显式启用宏的模板输出在 XLTM 包中保留现有 VBA 工程
- 调用方驱动的查询表刷新支持有界的固定架构结果、同步的表格和筛选区域、进度、取消和事务性回滚
更改
- 重复的报表条带克隆完整的串联评论对话并重映射标识,目标失败时保留回滚
- ODS 自定义布尔校验、受支持的公式值边界、列表源和限定引用在转换时做基准单元格重定位;不支持的定义和单元格引用一并省略
修复
- 固定区域数组公式逐元素计算原始区域算术,多数组 MAP 接受匹配的 lambda 参数,FILTER 可作用于计算数组和掩码
- 现代 #SPILL! 和 #CALC! 错误保留类型化的 XLSX 富值元数据,同时保留无关的导入元数据和富值桶
- 新编写的 XLSX 公式以规范的参数分隔符和未来函数前缀保存,保证与 Excel 互操作;保存保留内存中的表达式,重新打开则返回规范公式语法
- 受支持的本地图表系列在编辑和重算后刷新数值、文本、日期、错误、气泡和层级类别缓存
- 原生分页通过原始锚点渲染合并跨度、裁剪页面片段,并抑制内部边框和网格线
版本 2.384.84
更改
- Delphi 和 C++Builder 入门示例现在包含一个实用的销售订单,带类型化日期、价格、折扣和计算出的合计,并在重新打开后校验保存的 XLS 和 XLSX 工作簿
- 发票示例现在把可打印发票与可编辑的付款条款、收款台账串起来,计算折扣、税费、付款和未结余额
- 工作表布局示例现在演示合并标题的创建、枚举、移除,以及重新打开后的保留
- 又有九组聚焦 API 的示例移入 Miscellaneous,主目录继续聚焦完整的业务工作流和交互工具
移除
- 最小化的独立合并单元格和富文本示例已并入工作表布局和仪表板示例
版本 2.384.83
更改
- 演示目录现在把完整体验和实质工作流与聚焦的 API 配方分开,放进各平台的 Miscellaneous 文件夹,两个层级都提供直接导航和开箱可构建的工程
移除
- 三个冗余的区域和工作表布局演示已移除;其完整场景仍可在 RangeOps 和 SheetLayout 中找到
版本 2.384.82
更改
- Delphi 和 C++Builder 仪表板示例集直接打开一个已填充数据的工作簿,带实时合计、渲染好的图表、可编辑明细、价格方案,以及当前结果的导出
- API 导览提供仪表板、销售数据、图表预览和 API 配方的直接导航,并带覆盖全部 12 个月的可重复数据集
- 示例在本地携带所需的场景单元和清单资源,每个工程都可以独立复制,不再需要单独的公共目录
修复
- API 导览在进入仪表板公式之前先创建销售数据,实时演示因此能成功初始化
- 实时演示图表在重算后刷新缓存值和标签;C++Builder 示例集重复导出时保留当前编辑,不累积生成的报表工作表
版本 2.384.81
更改
- 工作表复制示例在重新打开输出后校验独立内容、重映射的格式、公式和嵌入对象
- 日期系统、搜索、分组、数组公式和图片示例校验各自不同的行为,输出失败时以非零退出码报告
修复
- 经典 XLS AutoFilter 区域在保存和重新打开后保留完整的行列边界,包括带活动条件的复制筛选
- 仪表板示例集在进入公式前先创建被引用的工作表,导出前计算合计,即使某个输出失败也会生成所有请求的伴随格式
- C++Builder 仪表板示例集会生成文档所述的 CSV、HTML 和 RTF 伴随文件
- 经典 Win64 C++Builder 静态构建下,编译报告示例在目标无法替换时仍会做常规的失败报告
- 交互式 API 示例报告 PDF、HTML 和 CSV 导出失败,而不是声称文件已写入
- 功能展示完成其受支持的语义哈希演示并校验保存的工作簿,不调用不受支持的现代绘图快照
版本 2.384.80
更改
- 示例目录按学习任务给工程分组,并标出推荐的入口、特定格式的课程和兼容的工程名称
- 工作表布局和区域重定位示例共享完整场景,同时保留现有的工程和输出名称
- 内存、高级 CSV、打印、文档属性、文本框和工作表保护示例演示完整工作流,带保存数据校验和显式失败报告
修复
- 重新打开的 XLSX 文本框再次保存时保留其绘图关系,批注因此在反复保存和重开的周期里持续可用,也不会出现重复的 XML 命名空间声明
- 批量转换示例在打开源或调用写入器之前先遵循 Skip existing,并在报告完成前校验工作簿成功码
- 发票示例在可打印区域内包含付款条款和完整标题
- 页面设置控制台示例以普通用户权限启动,不再触发 Windows 安装程序检测
版本 2.384.79
修复
- 带导出选项保存 ODS 文件时,序列化失败或保存被取消都会保留原有目标位置,目标替换错误的报告方式也保持一致
- ODS 导出选项走正常的保存生命周期,包括重算策略、进度取消、诊断,以及针对文件和流输出的工作簿写保护
- XLSX 流式保存遵循配置的重算策略:手动模式下保留已有的缓存值,需要时刷新脏公式
- XLSX 和 ODS 的完成型保存通知不会再把已经提交的输出变成“取消失败”
- 流式工作表修补初始化或收尾失败时,会释放源文件句柄,调用方可以清理自己的临时源,并在初始化失败后复用写入器
版本 2.384.78
修复
- 区域复制和克隆会保留相交的虚拟格式,并且只替换目标区域内的原有叠加格式,重叠复制和跨工作簿格式也包括在内
- 显式格式重置在保存并重新打开带行或列默认格式的工作簿后仍然生效
- XLSX 中显式使用工作簿默认格式的单元格,会保留工作簿的自定义字体、填充和数字格式
版本 2.384.77
修复
- 整行、整列的条件格式和数据验证目标只要完整包含在源区域内,就会跟随行/列编辑和区域克隆调整,目标几何保持有界,相对公式锚点原样保留
- 从 ODS 导入的有限重复空白样式保留其完整的已用区域范围;新建或重置的工作簿会在文档属性中报告当前库版本
- 整行、整列和整表单元格复制保留稀疏存储,清除被替换的目标内容时不会展开空白坐标,并保留重叠的源数据和跨工作簿格式
版本 2.384.76
修复
- 条件格式和数据验证规则在查找、删除、条件计算和验证检查中,现在对绝对引用、反序、整行、整列和以空白分隔的目标应用一致
- 畸形和超出网格的目标区域不再匹配单元格,同一规则中的有效区域继续保持有效;全网格条件统计保留稀疏单元格存储
- ODS 验证目标对整行、整列使用有效的单元格锚点,等价的重叠条件目标在重新打开时不再产生重复规则
版本 2.384.75
修复
- ODS 单元格比较和表达式规则在 Excel 兼容输出中保留完整的整行、整列和宽目标范围;重复空白载体让稀疏范围保持紧凑,并保留重叠规则和工作表元数据
- 重新打开 ODS 中重复的带样式空白区域时,其基础格式保持紧凑;标准条件规则在合并区域内保留重叠优先级和覆盖范围
版本 2.384.74
修复
- ODS 条件格式在保存并重新打开后保留受支持的字体、背景和数字格式覆盖,包括显式重置;高亮或目标范围不同的规则仍然相互独立
- XLSX 条件格式保留内置和自定义数字格式,包括仅被条件规则使用的格式;保存不再删除这些自定义格式,也不会让规则指向别的格式
- ODS 百分比样式包含其他电子表格应用要求的百分号,重新打开时不会重复该符号
版本 2.384.73
修复
- 复制文本到剪贴板、读取剪贴板文本、粘贴文本或 XML Spreadsheet 数据,在 Windows 10 和 11 上不再随机失败。每次剪贴板内容变化后,资源管理器和剪贴板用户服务(剪贴板历史)都会打开剪贴板几毫秒来读取它;文本操作以前只尝试打开一次,恰好赶上这个时刻就会以“拒绝访问”失败
- 所有剪贴板操作现在都采用与 BIFF8(Excel 格式)复制粘贴相同的策略:持续尝试打开剪贴板约 500 ms。其他应用占用剪贴板更久时操作仍然失败,已有的剪贴板内容保持不变
版本 2.384.72
修复
- 打开 ODS 文件时正确读取 General 数字格式。Excel 和 LibreOffice 写出的 General 是不带小数位数的数字样式,以前会被读成固定两位小数,1.5 这样的值会显示成 1.50;现在这类单元格不带任何数字格式,与源应用一致
- General 数字周围的文字保留,例如
General" kg"
版本 2.384.71
修复
- Excel 或 LibreOffice 保存的 ODS 文件不再报告覆盖整张工作表的已用区域。两者都给每行每列指定尺寸,一直排到第 1048576 行和第 16384 列;高度为自动的空行现在保持默认高度,一直延伸到最后一列的列宽变成工作表的标准列宽。10 行的 Excel 文件打开后再保存,体积从约 2.8 MB 缩到几 KB
- 手动设置的行高,以及有内容的行上自动计算的行高(例如为容纳换行文本而撑高的行)仍然保留
- 保存为 ODS 时,对自身没有列宽的列写入工作表的标准列宽(
StandardWidth);以前这个值会被丢弃,因为 ODS 没有表级默认列宽
版本 2.384.70
修复
- Excel 或 LibreOffice 保存的 ODS 文件重新做到毫秒级打开。两者都把每行填充到第 16384 列,并向下追加填充块直到第 1048576 行;10 行的 Excel 文件以前打开要 5 分多钟,LibreOffice 存的文件则根本跑不完
- 和文档 Default 单元格样式完全一样的空填充单元格不再被转换成带格式的空白单元格;10 行的 Excel 工作表以前会多出约 180,000 个这种单元格。自带填充、边框、字体、对齐、数字格式或保护的空单元格仍然保留
版本 2.384.69
修复
- 保存到 ODS 的条件格式现在能在 Excel 里显示。值规则(等于、介于、大于等)和公式规则还会以标准 ODF
style:map条件的形式写到所覆盖的单元格上——这是 Excel 唯一读取的形式;以前 Excel 打开 HotXLS 的 ODS 文件时看不到任何这类规则 - LibreOffice 现在按真实的运算符和边界导入 HotXLS 写出的 ODS 值规则;以前每条规则都会被它变成“等于 0”
- 打开 ODS 文件时读取以
style:map条件存储的条件格式,也就是 Excel 和其他 ODF 生成方写出的形式。当文件同时以 LibreOffice 自身的形式携带相同规则时,每条规则只读一次 - 打开 ODS 文件时读取 LibreOffice 对值规则的写法(
=5、between(1,10)、!="x");早期 HotXLS 版本的文件仍照旧打开
版本 2.384.68
修复
- 对多单元格区域或内联数组套用运算符的公式,例如
=SUM(A1:B1*{10,100})、=SUM((A1:B2>2)*1)或=MAX(A1:B2-1),现在按 Excel 365 的方式存储,Excel 显示的结果和 HotXLS 一致:XLSX 中存为单单元格动态数组公式,XLS 中存为单单元格数组公式。以前 Excel 会用隐式交集打开它们(=SUM(@A1:B1*@{10,100})),显示 #VALUE! 或错误的值 - XLS 数组公式的引用和数组常量按数组形式写出,与 Excel 一致;以前 Excel 会用隐式交集求值 HotXLS 写出的数组公式
- 带动态数组公式(包括用
SetDynamicArrayFormula创建的那些)的 XLSX 文件可以在 Excel 中打开;以前 Excel 会拒绝整个文件,因为动态数组元数据使用的扩展标识符大小写不同
版本 2.384.67
修复
- 两个引擎的文本比较现在都和 Excel 的顺序一致:忽略大小写,并采用系统区域设置的单词排序,所以连字符和撇号只在其余内容完全相同时才用来分出先后(
"a-b">"ab"为 TRUE),而其他标点排在数字和字母前面("a~b">"ab"和"a_b">"ab"为 FALSE)。比较运算符、COUNTIF、SUMIF、*IFS 家族和数据库函数中的>text/<text条件、数组比较、查找、SORT 这类函数以及区域排序都照此处理 - VLOOKUP 和 HLOOKUP 比较文本时不区分大小写,所以
VLOOKUP("ABC",...)能像 Excel 一样找到 “abc”
版本 2.384.66
修复
- 写入 ODS 的基于公式的条件格式现在能被 LibreOffice 识别:规则会连同基准单元格一起以
formula-is(...)形式存储,这正是 LibreOffice 自己写出的形式。以前 LibreOffice 会把这类规则全部当成简单的 “单元格值等于 0” 规则来读 - 写入 ODS 的条件格式公式会像单元格公式一样转换内联数组、并集、整列引用和整行引用,并以同样方式保留
$标记(COUNTIF($A:$A,A1)>1变为COUNTIF([.$A:.$A];[.A1])>1) - 打开 ODS 文件时,既能读取 LibreOffice 写出的基于公式的条件格式(
formula-is),也能读取早期 HotXLS 版本文件中的条件格式
版本 2.384.65
修复
- 写入 ODS 的公式里,整列引用和整行引用(
A:A、$A:$B、1:1、$1:$2)现在采用 OpenFormula 的引用形式([.A:.A])。以前 Excel 打开这类单元格会得到=SUM(A:(A))加 #NAME?,或者干脆把公式丢掉;HotXLS 写出的 ODS 文件现在在 Excel 和 LibreOffice 里显示的公式和值完全一致
版本 2.384.64
修复
- 数据库函数(DSUM、DCOUNT、DCOUNTA、DAVERAGE、DGET 等)对不带运算符的文本条件按“开头匹配”处理,与 Excel 一致:条件区域里的
ab能匹配 abc、ab 和 AB,通配符照常生效(a?能匹配所有以 a 开头、不少于两个字符的条目)。=ab和<>ab仍然比较整个条目
版本 2.384.63
新增
- 公式可以包含内联数组常量,比如
{1,2;3,4}(列用逗号分隔、行用分号分隔,可以含数字、文本、TRUE / FALSE 和错误值),也可以包含引用并集,比如(A1:B2,D4),XLS 和 XLSX 两个引擎都支持;以前输入这些写法会直接报 “invalid formula syntax” - 数组常量按数组求值(
=SUM({1,2}*{3,4})、=ROWS({1,2,3;4,5,6})、=SUMPRODUCT(A1:A2,{1;10})),并集可以用在 SUM、COUNT、AVERAGE、MIN、MAX、COUNTA 里,也可以用在 AREAS、ISREF 和 INDEX 的 area_num 参数里
修复
- XLS 文件现在按 Excel 能正确读取的方式存储数组常量:以前常量被写成引用,Excel 显示成
=#N/A;含数组常量或并集的 XLS 公式读回来时也带着公式文本
版本 2.384.62
修复
- 交集运算符(两个引用之间的空格)现在返回两个引用共同覆盖的单元格,与 Excel 一致:
=SUM(A1:B2 B1:B2)的结果是 6 而不是 2,没有公共单元格的引用给出 #NULL!,交集也可以传给 ROWS、COLUMNS、INDEX 这类接受引用的函数。这个行为对两个引擎、对计算中的公式和对存储在单元格里的公式都生效 - XLS 文件让交集公式在 Excel 里依然可用:被引用的区域现在按引用写出,Excel 不会再把
=SUM(A1:B2 B1:B2)读成=SUM(@A1:B2 @B1:B2)然后显示 #VALUE! - 交集作为单个值使用、且公共单元格多于一个时,会挑公式所在行或列上的那个单元格,和其他多单元格引用一样
版本 2.384.61
修复
- SUMPRODUCT 现在接受形如
(B1:B2>0)*1、--(B1:B2>0)、B1:B2*C1:C2的数组表达式和单个参数,XLS 和 XLSX 两个引擎都是;这些写法以前返回 #N/A。形状不同的参数返回 #VALUE!,任何参数里的错误会原样返回,文本和逻辑值按 0 计,与 Excel 一致 - SUM、COUNT、AVERAGE、MIN、MAX、COUNTA 里对区域做运算的表达式现在逐元素求值,行为对齐 Excel 的动态数组:
=SUM((B1:B2>0)*1)会统计两行,而不是只取第一个单元格 - TRUE 在算术里按 1 计:
=TRUE*1以前返回 -1 - 逐元素比较会把空元素当作 0、"" 或 FALSE 来匹配另一侧,逻辑值之间按逻辑值比较;在数组里用
&连接逻辑值会得到 TRUE / FALSE
版本 2.384.60
修复
- 带整格匹配的通配符查找和替换(两个引擎里的
FindText、ReplaceText、FindTextIn、ReplaceTextIn)现在像 Excel 那样匹配整个单元格:a*b找得到abcb了,以前因为匹配在第一个b处停止而把它拒之门外 - 通配符查找和替换里,
~让紧随其后的字符按字面处理,结尾的~会被忽略,与 Excel 一致:a~b匹配ab,a~~b匹配a~b
版本 2.384.59
修复
- XLSX 文档的创建和修改时间(
Created、Modified)以及日期型自定义属性,现在即使时间戳带小数秒(2026-03-15T08:30:00.123Z)或时区偏移(+08:00、-05:00)也能正确读取:时间会转换成本地时间,而不是原封不动地当作当地时间 - 只有日期的时间戳(
2026-07-01)按该日期读取;带时间但没有时区的写法(W3CDTF 格式本就不允许)仍按本地时间读取
版本 2.384.58
修复
- 经由
TXLSAutoFit的 XLSX AutoFit(FitXlsxSheet、FitXlsxSheetColumns、FitXlsxSheetRows、MarkSheet)现在按每个单元格实际显示所用字体来测量;2.384.46 以来它取的是工作簿字体列表里的下一个字体,粗体表头可能被拿另一个单元格的小字体来量,结果宽度偏窄 - AutoFit 也会使用单元格从所在行或列样式继承来的字体
版本 2.384.57
修复
- XLSX 引擎现在按 Excel 和 XLS 引擎的方式处理"以显示精度为准"(
FullPrecision = False)的舍入:百分比格式多保留两位小数(0.1234 显示为0.0%时存 0.123,而不是 0.1),负数和零各用各自的格式段,中点值远离零舍入(2.5 显示为0时存 3,而不是 2) - 两个引擎在"以显示精度为准"下都支持千位缩放逗号:12345.678 显示为
0.0,(即 12.3)时存 12300,与 Excel 一致 - 带数字格式的单元格里的逻辑值公式结果,不会再被 XLS 引擎的"以显示精度为准"处理成 -1
版本 2.384.56
修复
- HotXLS 写出的 ODS 文件现在会声明公式前缀的命名空间,LibreOffice 因此能真正计算公式,而不是在每个公式单元格都显示 #VALUE!
版本 2.384.55
修复
- 写入 ODS 的公式保持原义:内联数组使用 OpenFormula 的行分隔符(
{1,2;3,4}变成{1;2|3;4},不再是单行),像(A1,B2)这样的引用并集变成~运算符而不是两个函数参数,绝对引用保留$标记 - 从 ODS 读回这类并集时不再多套一层括号,这些公式可以在 XLSX 到 ODS 再回 XLSX 的往返中原样保留
版本 2.384.54
修复
- 以 Excel 5.0/95 格式保存的密码保护 XLS 文件(XOR 混淆)现在能在 Excel 中打开。文件里存的密钥改由密码推导而来,不再是随机值,混淆数组也使用 Excel 所期望的位旋转;之前 Excel 对每个这类文件都报密码错误,而只修正密钥时又会报文件损坏
- 读取 XOR 混淆的工作簿时也用同一套修正后的数组,密钥与密码匹配的文件会按 Excel 加密的方式解密;更早版本 HotXLS 写出的 XOR 文件仍然可以打开
版本 2.384.53
修复
- 在 XLS 和 XLSX 两个引擎中,空单元格与逻辑值比较时都把空单元格当作 FALSE,与 Excel 一致:A1 为空时,
=A1=FALSE和=A1<TRUE现在返回 TRUE,=A1=TRUE返回 FALSE。之前空单元格按 0 参与比较,而 0 排在所有逻辑值之下
版本 2.384.52
修复
- COUNTIF、COUNTIFS、SUMIF、SUMIFS、AVERAGEIF、AVERAGEIFS 以及数据库函数在 XLS 和 XLSX 两个引擎中都按 Excel 的通配符规则匹配文本条件:
~*和~?匹配字面量的星号或问号,方括号是普通字符,不含*和?的条件就是普通的不区分大小写比较。之前像"[x]"这样的条件会被当成字符集合,"~*"匹配不到星号,写错的模式则一声不响地匹配不到任何东西 "<>text"条件会把数字、逻辑值和空单元格都算作"不相等",单独一个"<>"则统计所有非空单元格,与 Excel 一致;<>下的文本比较现在不区分大小写- MATCH 和 XLOOKUP 的通配符匹配把
~当作其后字符的转义符,并忽略末尾的~,与 Excel 一致
版本 2.384.51
更改
- 只读单元格快照把工作表名称保留在共享的 UnicodeString 存储中;SheetName 现在是可读写的 WideString 属性,读写和赋值语法与之前一样普通,但其原始字段地址和原先的记录布局不再受支持;调用方必须针对本版本重新编译
- 向空目标流输出报告时会跳过多余的备份快照,同时在输出失败时保留对目标内容和位置的回滚
- 深度公式审计处理数值缓存的效率更高,同时保留缓存的 Variant 值、求值结果和上报的发现项
修复
- XLS 和 XLSX 的剪贴板粘贴在同一个剪贴板锁下同时捕获 BIFF8 数据和回退文本,两种格式因此来自同一份剪贴板状态;可读的 BIFF8 在配套文本取不到时仍可用,只有文本不可用时不插入任何单元格,现有的剪贴板打开重试策略保持不变
- 必需文本或 BIFF8 剪贴板发布失败时,在清理过程中保留原始 Win32 错误码,调用方可以在调用结束后立即取到失败诊断
- 单次尝试的剪贴板文本读取器在剪贴板清理过程中保留原生数据读取失败,不改变其重试行为
版本 2.384.50
更改
- 公式符号审计在稀疏的 XLS 工作簿上跑得更快,同时保留上报的发现项及其顺序
版本 2.384.49
修复
- WorkbookAudit 示例(Delphi 和 C++Builder):
AuditReport.json写出时不再带 UTF-8 字节顺序标记,严格的 JSON 解析器也能正常读取;XLS 工作表会报告其 AutoFilter 区域;指向其他工作簿的 XLSX 定义名称显示被链接的文件,而不是它的索引;命令行运行不再覆盖已保存的设置;文件夹输入框为空时回退到程序所在文件夹,而不是盘符根目录;示例文件保存失败会记入日志,不再被报告为已创建 - ApiTour 示例:重建展示用工作簿失败时会保留上一份,导出按钮不再崩溃;构建过程抛出异常时会释放工作簿;HTML 导出会把错误写入日志;日志里报告的是实际创建的五个条件格式
- ExcelGraphics 示例:遇到不支持的图片类型会明确报告,不再保存一张空工作表;打开对话框只列出支持的格式
- OdsExport 示例在往返检查中会比较字体大小,检查或保存失败时返回非零退出码;C++Builder 版 OdsImport 示例会检查保存结果,报告时也不再创建空单元格
- DataExport / ExportWithColoring 示例只收窄注释里说的第一列;C++Builder 的导出示例在程序所在文件夹打开保存对话框
- 示例 Readme 列出的是示例实际用到的 API 和输出文件
版本 2.384.48
修复
- 文档的创建时间和最后保存时间现在按文件格式要求以 UTC 写入,读取时再转回本地时间,涉及 XLSX 的
Created/Modified和自定义日期属性,以及 XLS 的CreatedDate/LastSavedDate。之前是把本地时间当成 UTC 直接存进去,Excel 和 Windows 资源管理器显示的时间戳会偏出一个时区偏移量;HotXLS 自己写入再自己读取的值不受影响
版本 2.384.47
修复
- 使用 XOR 混淆的 XLS 文件(Excel 5.0/95 工作簿的密码保护,
EncryptionType = xletXor):每条记录所用的密钥位置现在遵循文件格式规范,与其他电子表格软件的读写方式一致。之前 HotXLS 只能读自己写出的 XOR 文件,任何长度不是 16 的整数倍的记录,在别的软件里解出来都是乱码
版本 2.384.46
修复
- XLSX AutoFit(
FitXlsxSheet、FitXlsxSheetColumns、FitXlsxSheetRows、MarkSheet)现在按每个单元格自己的字体、字号、粗体和斜体来测量,而不是一律按 Arial 10,Calibri 11 的文本、粗体表头和大标题不会再算得偏窄 - XLSX AutoFit测量的是经数字格式(日期、货币、百分比)显示出来的文本,而不是存储的原始值
- XLSX AutoFit算出的列宽现在受
MaxWidth约束;之前单元格边距是在应用上限之后才加上去的 - 对没有显式列宽的列中的自动换行单元格,XLSX 自动行高按工作表默认列宽来计算;之前这类单元格被当成单行测量,行高会偏矮
版本 2.384.45
修复
- XLS 工作簿:
ApplyAutoFilter的条件如'>=100'或'=2.5'现在保存为数字条件;之前保存成文本,而 Excel 按文本比较,结果筛选把所有数值行都隐藏了。不带比较运算符的值(如'North'或'100')仍保存为文本,与 Excel 保存列表选中项的方式一致 - 这类条件的
Criteria1.DataType现在返回 4(数字)而不是 6(文本);Criteria1.Value读回来仍是 100
版本 2.384.44
修复
- 带 A1 引用文本的
INDIRECT会读到下一行、右一列的单元格(INDIRECT("D1")返回的是 E2),XLS 和 XLSX 工作簿都有这个问题;R1C1 文本本来就是对的。超出最后一行或最后一列的引用现在返回#REF!
版本 2.384.43
修复
- XLSX 工作簿:公式现在可以引用整张 1,048,576 × 16,384 的工作表。超过 IV 列或 65,536 行的引用(
=XFD1、=A100000、=SUM(XFC1:XFD1)、Data!C1048576)以前在录入时会被当作未知名称拒绝,或者算出错误值;现在可以解析、计算,随插入的行列一起移动,并按原样保存 - XLSX 工作簿:整列和整行引用(
A:A、1:1)覆盖整张工作表,因此ROWS(A:A)返回 1048576,SUM(A:A)会包含 65,536 行以下的值;ADDRESS会返回$XFD$1这样的三字母列 - XLS 工作簿:65,536 × 256 工作表中最后一行和最后一列的引用(
=A65536、=IV1)现在可以接受;之前它们会被当作未知名称拒绝
版本 2.384.42
修复
- 旧版
lxRows/lxColsunit(为源码兼容而保留,工作簿类并不使用):行索引超过 1,048,575 时抛出ERangeError,不再回绕到第 1 行;ROW 记录不再把每次大纲级别变化都标成折叠;为没有自己设置的列写 COLINFO 时改用默认值,不再崩溃
版本 2.384.41
修复
- 以 ANSI 字符串模式编译的 Lazarus / Free Pascal 构建:路径中含有系统代码页之外字符的临时文件,现在会在清理时删除;之前它们的文件名被有损存储,文件就一直留在临时文件夹里
版本 2.384.40
修复
TlxCellMMU(紧凑的单元格存储)在 256 行块内乱序写入单元格、或写到已有单元格上时抛出EInvalidOperation,位置为负数或列超过 65,534 时抛出ERangeError;之前这类写入会悄悄破坏相邻的行。库自己的批量写入本来就保持行序,不受影响
版本 2.384.39
更改
- XLSX 工作簿:给
TXLSXWorksheet.TabColor赋值现在会同时把TabColorIsAuto设为 False,标签颜色不用再赋一次值就能显示,与字体、填充和边框的颜色属性保持一致。之后再把TabColorIsAuto设为 True,仍会移除标签颜色
版本 2.384.38
更改
- XLS 工作簿:
TXLSWorksheet.AddPivotTable现在把DestRow和DestCol当作从 1 开始,与Cells[Row, Col]、文档以及 XLSX 引擎一致;AddPivotTable('Data!A1:C9', 3, 1, ...)会把数据透视表锚定在 A3。传入 0 起始位置的代码需要加 1,锚点为 0 或落在工作表之外时现在返回nil - XLS 工作簿:
TXLSPivotTable上的位置属性(FirstRow到FirstDataCol)和TXLSPivotCache上的源区域(SourceFirstRow到SourceLastCol),对新建和已打开的数据透视表现在都从 1 开始,同一段代码在两个引擎里读到的是同样的单元格,数据透视表在两者之间复制时也能保持原位
版本 2.384.37
修复
- XLSX 工作簿:放在 65,535 行以下的数据透视表,或因插入行而被推到那里的数据透视表,现在会保持真实位置;之前锚点被截成 16 位,保存出来的数据透视表会落到错误的行上
- 数据透视表的位置属性(
FirstRow、FirstCol、LastRow、LastCol、FirstHeaderRow、FirstDataRow、FirstDataCol)现在是Integer而不是Word - XLSX 工作簿:当锚点落在工作表之外,或复制的区块会超出最后一行或最后一列时,
AddPivotTable和AddPivotTableCopy现在返回nil,不再写出 Excel 会拒绝的数据透视表
版本 2.384.36
修复
- C++Builder 示例 XlsTables、XlsCondFormat12、XlsCreateChart 和 InteractiveFeatures 现在把文本列写成文本;之前把
const wchar_t*传给OleVariant会选中bool构造函数,所有表头和标签都变成了 TRUE - DefinedNames 示例从索引 1 开始列出 XLS 名称,不再因索引 0 崩溃;WorkbookAudit 会统计 XLS 工作簿名称中的外部引用;FileMonitor 写出的是
Monitored.xlsx,而不是拼错的.xlsxx(它会让每次读取工作表名称都失败) - Pictures 和 OdsExport 示例嵌入的是有效的 PNG;之前字节字面量被字符串转换破坏,Pictures 的数据块长度也不对
- ApiTour 现在在 API Tour 工作表上执行
DEMOADD步骤,而不是在当前的 Dashboard 工作表上,后者收到文本参数时可能中止启动;C++Builder 经典版 Tour 现在会显示该步骤的结果 - FreezePanes、QuickStart 和 ApiTour 精确冻结各自的表头行和列;
FreezePanes接收的是行列数,而不是第一个可滚动的单元格 - ApiTour、CondFormatGallery、OdsExport 和 WorkbookAudit 里的条件格式颜色改为 API 期望的 BGR 顺序,数据条和色阶会显示预期颜色;CondFormatGallery 给 top-N、重复值和高于平均值规则加上了可见的高亮
- MemoryDataExport 和 HtmlExport 不再把成功的 CSV、HTML 和 RTF 导出报告为失败(这些写出器成功时返回 0),MemoryDataExport 即使其中一个失败,也会写出全部三个文件
- 先保存、再报告或打开文件的示例(QuickStart、ExcelGraphics、HotXLSInMemory、OrderCalc、PurchaseOrder 和若干控制台示例)现在会检查保存结果,文件被锁定时不再宣告成功
- ConversionWorkbench 把任何负数的写出器返回值都视为失败,并先删除旧输出,过期文件不会再掩盖转换失败;C++Builder 版会把每张工作表导出为 HTML
- InvoiceTemplate、OrderCalc 和 DataExport 不再依赖 Windows 的数字和日期格式:税率公式、价格和日期阈值在使用逗号作小数分隔符、或年份在前的日期顺序的系统上也能正常工作
- 其他小修正:QuickStart 的合计行在浅色填充上使用深色文字;DateSystems 显示原始序列号和有效的 1904 纪元日期;CrossWorkbookCopy 让合并单元格留在表格之外;CrossWorkbookCopyXls 使用逗号分隔的列表和真正的浅蓝色;Hyperlinks 显示预期的链接文本;SheetProtection 正确描述并设置允许的操作;OdsImport 扫描时不再创建空单元格;InteractiveFeatures 会把没有 VBA 内容的工作簿保存为 .xlsx;WorkbookAudit 会报告加密的 XLS 文件及其 VBA 工程;ChartTypes 让图表避开数据;C++Builder 的数据导出示例会从 IDE 输出文件夹中找到 Demos.mdb;FormulaFunctions 会检查重新打开的单元格,并统计重新打开失败的次数
版本 2.384.35
修复
- 给 XLSX 的字体、填充、边框边线或富文本 run 赋颜色,现在单独赋值就会生效。这些对象起初使用自动颜色,除非同时清除对应的
ColorIsAuto/ForegroundIsAuto/BackgroundIsAuto标志,否则显式的Color、ForegroundColor或BackgroundColor会被悄悄丢弃 - 赋 RGB 颜色时,也会清除之前的主题色或索引色来源,否则它们会盖过 RGB;赋值为 0 或更大的主题色或索引色槽位时,会清除自动标志
- 从剪贴板粘贴到 XLSX 工作簿中的边框颜色、经典工作簿导出为 XLSX 时的边框颜色,以及传给
TXLSXComment.SetFont的字体颜色,现在都会写出来,不再被自动颜色吞掉
版本 2.384.34
修复
- 数据透视字段项目列表中的小计、总计和空白项不再被当成数据项读取;之前复制这样的数据透视表,会写出一个指向缓存索引 -1 的项目
- 来自 Excel 文件的数据透视字段会保留默认小计:Excel 在小计开启时会省略
defaultSubtotal,而 HotXLS 把缺失的属性当成了关闭 - 共享项缺少
containsString的数据透视缓存字段,现在按架构默认值读作文本字段,不再读成混合字段
版本 2.384.33
修复
- XLSX 引擎写出的数据透视表使用架构规定的轴取值(
axisRow、axisCol、axisPage);早期版本写的是rowAxis/colAxis/pageAxis,这不是有效的 OOXML。HotXLS 仍能读取含旧取值的文件 - 用在值区域的数据透视字段会标上
dataField="1",没有项目的字段不再带有架构不允许的空<items>列表 - 复制或重建数据透视表时,隐藏和折叠的项目会保持原有状态,每个字段的项目列表末尾会带上 Excel 为其小计函数所期望的小计项
- 数据透视缓存字段带的是数值型
numFmtId,而不是文本General
版本 2.384.32
修复
- ODS 导入能正确转换内联数组的行:
{1;2|3;4}变成{1,2;3,4},不再生成 Excel 无法解析的公式 - ODS 导入会转换引用并集运算符:
SUM([.A1:.B2]~[.C3])变成SUM((A1:B2,C3))
版本 2.384.31
修复
- ODS 导入现在能读取时长带有日期部分的时间单元格,例如
P0Y0M0DT12H30M15S,以及P1W这样的周时长,不再回退到显示文本 - ODS 时长中位于
T分隔符之前的M表示月,而不是分钟;长度不固定的非零年和月现在会回退到显示文本,不会再把P1M变成一分钟
版本 2.384.30
修复
- 文件过短或已损坏时,
TGWmfEmfRead会关闭图元文件,不再一直锁定到进程退出 - 对于头部给出的每英寸单位数为零的 placeable WMF,
TGWmfEmfRead现在把它当作未指定尺寸处理,不再除以零 TGWmfEmfRead在BSEWMF中保留 32 位的尺寸和边界,与它所描述的图片头一致
版本 2.384.29
修复
- 经典 XLS 工作簿中 64 KB 及以上的 WMF 和 EMF 图片,现在能在打开和保存之后保留下来;之前它们的存储大小和解压后大小被截成 16 位,Excel 无法解码保存文件中的图片
- -32768..32767 范围之外的图元文件图片边界现在会保留,不再回绕
版本 2.384.28
修复
- 当文本或属性值包含控制字符、不成对的代理项或 U+FFFE / U+FFFF 时,
TXMLWriter不再生成格式错误的 XML;XML 1.0 无法表示的字符会被略去 TXMLWriter把元素文本中的回车符写成字符引用,文本读回来保持不变,不会再把 CR 变成 LF- 目标流接受的字节数少于写入的字节数时(例如磁盘已满),
TXMLWriter会抛出错误,不再悄悄留下一个被截断的文件
版本 2.384.27
修复
- 复制公式指向被复制区块上方或左侧的区域时(例如把 B5 中的
=B4+1复制出去),粘贴后的引用现在仍然是上一行;之前它会钉死在原来的单元格上,公式甚至可能引用自己 - HotXLS 发布的 Excel 剪贴板数据会让被复制的单元格保持其在工作表中的位置,读取该数据的应用程序看到的是原始地址
版本 2.384.26
修复
- zlib 字符串辅助函数(
ZCompressStr、ZDecompressStr及其就地版本)现在会处理整个字符串;对 Unicode 字符串,之前只压缩了文本的前一半,往返之后数据会丢失
版本 2.384.25
修复
- 经典工作簿中,显示文本带标志但没有 site 标志的超链接现在能正确读取;目标类型特殊的超链接不再导致整个文件打开失败,也不会返回乱码的子地址
版本 2.384.24
修复
- 文件监视器的变更处理程序抛出异常时,监视器不再悄悄停止,而是继续监视并报告之后的变更
版本 2.384.23
修复
- 格式错误的文件中,色调值小于 -1 的主题颜色现在会被钳制为黑色,导出或打印时不再产生随机颜色
版本 2.384.22
修复
- 通过 API 创建的数据连接,保存时会带上文件格式要求的刷新版本属性
- 连接缺少名称或 id、或名称或 id 重复,不再导致整个工作簿无法打开;该条目会原样保留,并原封不动地写回
版本 2.384.21
修复
- 修改 VBA 模块的源代码现在能在 Excel 中生效:工程保存后,Office 会编译新的源代码,不再运行旧源码缓存的编译结果
- VBA 模块源代码现在按格式定义的压缩形式保存;之前每个模块的最后一个数据块的存储方式会被 Office 视为已损坏
- 畸形的 VBA 目录流不再导致打开工作簿时卡死,缺少流信息的模块条目也不会再在工程中留下空模块
版本 2.384.20
修复
- 从经典工作簿加载的定义名称,在插入或删除行列并保存之后,会保留位移后的引用;之前文件里写的仍是原来的引用
版本 2.384.19
修复
- 只对 XLSX 工作表的行、或只对列做 AutoFit 时,不再把没有显式尺寸的每个被测量列的宽度、或每个被测量行的高度设成零
版本 2.384.18
修复
- 经典工作簿中的 AutoFilter 条件现在按设置时的方式连接:之前 AND 条件被存成 OR,OR 被存成 AND,Excel 会显示错误的行
- 布尔型 AutoFilter 条件现在保存为 TRUE 或 FALSE;之前它们的存储形式会被 Excel 读成错误值
版本 2.384.17
修复
- 经典工作簿的创建日期和最后保存日期现在与 Excel 一致;之前写出时晚一天,读取时又早一天
- 最后保存日期现在存放在它应属的文档属性里;之前它被存进页数的槽位,Excel 和 Windows 不会把它显示成日期
- 总编辑时间现在按时长存储,Excel 和 Windows 显示的是真实的分钟数,而不是约 299 年;早期版本写出的时间仍能正确读取
版本 2.384.16
修复
- 导入检查中的唯一值规则现在比较的是单元格的值;之前一列中第一个值之后的每个值都被报告为重复
- 给同一列再添加第二条规则时,会干净地替换第一条;之前旧规则被释放了却仍会被检查,释放检查器时还会抛出无效指针错误
- 检查工作表时不再为读到的空白创建空单元格
- 只保留违规行时,当违规位于已用区域之下,不再越过行表写入;标题行现在插在数据上方,不再覆盖第一条违规
版本 2.384.15
修复
- 以小块读取 ZIP 条目时,当压缩数据在重复序列中间结束,不再丢失条目的最后几个字节,这个问题可能让有效的 XLSX 因条目大小错误而打开失败
- 解压后超过 2 GB 的数据现在会抛出错误,不再让 64 位进程崩溃
- 解压流在输入耗尽之后会返回全部剩余数据,不再提前停止
版本 2.384.14
修复
- 每像素 1、2 或 4 位的隔行扫描 PNG 图片不再越过图像缓冲区写入;之前导出或打印含有这类图片的工作簿时,可能崩溃或破坏相邻像素
- 当某一遍以 Average 或 Paeth 滤波器开头时,隔行扫描 PNG 图片现在能正确解码
- 2 位灰度 PNG 图片现在会渲染出真实的灰度级,读取 2 位灰度和调色板图片的单个像素也会返回正确的颜色
- 压缩数据带有尾部字节的 PNG 图片不再让解码器卡死,带有大图像数据块的有效图片也不再被 CRC 错误拒绝
- 位深无效、或数据块长度超出文件末尾的图片现在会被干净地拒绝,不再崩溃或分配数 GB 内存
- 保存到 PNG 图片中的文本块不再被截断或损坏
版本 2.384.13
修复
- 使用 RC4 加密的经典工作簿,遇到 28 个字符及以上的密码时现在使用正确的密码哈希,因而可以在 Excel 中打开;之前 32 个字符及以上的密码生成的文件,连 HotXLS 自己也打不开
- 打开时接受最长 255 个字符的 RC4 密码,早期版本保存的 28 到 31 个字符密码的文件仍能打开
- 长度过大的畸形 RC4 CryptoAPI 头现在会报告为文件损坏,不再抛出笼统的错误
版本 2.384.12
修复
- 声明使用 SHA-256 的 Agile 加密工作簿现在能正确解密;之前数据段总是用 SHA-512 的初始化向量解密,即使密码正确,工作簿也打不开
- 密钥数据和密码密钥加密器使用不同哈希算法的 Agile 文件,不再被报告为密码错误
- 超过格式上限 10,000,000 的迭代次数会被立即拒绝,不再让 CPU 空转数小时
- 被截断的密码验证器不再越过缓冲区读取,
SaveAsEncryptedAgile写出的完整性密钥现在也有了格式要求的长度
版本 2.384.11
修复
- 用
SaveAsEncrypted保存的工作簿现在可以在 Excel 中打开。ECMA-376 标准加密的密钥推导少了最后一步,包大小又和数据一起被加密,所以 Excel 会拒绝这个密码;Excel 2007 这样加密的工作簿现在也能打开了 - 早期 HotXLS 版本保存的加密工作簿,用正确的密码仍能打开
- 长度过大的畸形加密头不再在打开时引发访问冲突
版本 2.384.10
修复
- 在单元格之间复制粘贴公式,以及连同公式一起排序,不再移动绝对引用,与 Excel 一致:
$A$1保持不动,A$1只移动列,$A1只移动行 - 像
LOG10(这样看上去像单元格地址的函数名,粘贴公式时不再被当作引用位移,粘贴后的公式不会再变成LOG11(和#NAME? - 带工作表名限定的引用,例如
Sheet2!A1或'My Sheet'!B3,现在粘贴时也会像不带限定的引用一样位移 - 把以
=或撇号开头的文本粘贴进经典工作簿时,现在会保持为文本;之前它会被变成公式,或者丢掉第一个字符
版本 2.384.9
修复
[h]、[mm]和[ss].00这类已用时间数字格式,现在会被识别为时间格式,不再被误认成颜色名;关闭“以显示精度为准”(FullPrecision设为False)时,格式为[ss].00的时长不再被当成普通的两位小数来舍入,之前这会把几秒的值变成零- 分析数字格式时,与小时或秒之间隔着字面量的分钟标记,例如
h:mm和mm:ss,现在读作分钟而不是月份
版本 2.384.8
修复
- 把文本、HTML 或表格数据复制到 Windows 剪贴板时,现在会使用有效的临时所有者,没有应用程序窗口的控制台程序和工作线程也不例外;所有者销毁之后,复制的数据仍然可用
- 剪贴板发布失败时,现在会释放 Windows 没有接受的每个已分配数据块,表格发布失败时连带的文本和 HTML 数据块也一样
版本 2.384.7
修复
- 加入 Free Pascal 支持和
DATE闰日修复之后,用 RAD Studio XE5 到 RAD Studio 12 Athens 从源码编译库会失败:这些编译器在跳过 Free Pascal 版本检查时仍会解析它,并拒绝DATE(1900,2,29)特例背后的数值转换。这两处现在都改用所有受支持编译器都接受的写法,完整的 RAD Studio 版本范围重新可以构建
版本 2.384.6
修复
- 在经典 .xls 工作簿中复制带批注的单元格时,无论是工作簿内复制、复制到另一个工作簿,还是通过移动行和列,批注文本会保留,但其格式化 run 会丢失,于是每份副本都以单一字体显示整条批注;现在 run 随文本一起走,跨工作簿复制时其字体会加入目标工作簿
- 在经典 .xls 工作簿中用
Sheets.AddCopy复制整张工作表时,没有值也没有格式的单元格上的批注会被丢掉;这些批注现在也会被复制 - .xlsx 工作簿中的批注重新打开时会丢失格式化 run 的字体名称、删除线和颜色,保存的 run 也从不携带下划线或上标/下标;现在这些都能在保存并重新打开后保留,包括用
CloneRangeTo从另一个工作簿复制来的 run
版本 2.384.5
修复
- 经典 .xls 工作簿中批注和文本框里的格式化 run 在保存时不再丢失字体。仅被这类 run 使用的字体可能从保存的字体列表中掉出去,最常见于 HotXLS 对已保存过一次的工作簿再次保存时,此时该 run 在 Excel 里会显示为默认字体,或捡到期间加入的某个字体;现在这些字体都会保留,run 会与字体列表的其余部分一起重新编号
- 批注和文本框的
TextRuns.FontIndex遵循文件的字体编号,其中索引 4 永不使用,第五个字体的索引是 5;针对索引字体颜色的调色板保留区现在也按同样方式读取这些索引
版本 2.384.4
修复
- 2.384.1 的字体编号改动本身就是 bug:经典 .xls 文件按 Excel 的方式给字体编号([MS-XLS] §2.5.129),索引 4 永不使用,第五个字体的索引是 5,但 2.384.1 改成了单纯的从零计数;于是保存出的工作簿在 Excel 里每个自定义字体都提前一个槽位显示(第一个会退回默认字体),而 Excel 创建的工作簿打开时每个自定义字体都滞后一个槽位。现在保存和打开重新遵循 Excel 的编号,并与 Excel 自身写入和读取的工作簿核对过
- 富文本单元格在打开、保存和跨工作簿复制工作表的过程中保留每个格式化 run 的字体,包括那些字体没有被任何单元格直接使用的 run
- 由 2.384.1 到 2.384.3 保存的、含有五个及以上字体的工作簿已经带着错位的编号,Excel 和 HotXLS 都无法把它与有效数据区分开;请从源头重新生成,或重新应用受影响的字体后再次保存
版本 2.384.3
修复
- 两个工作簿引擎中,1900-01-01 至 1900-02-28 的日期都比 Excel 偏一天,原因是 Excel 的 1900 年历法会数出一个并不存在的 1900-02-29;现在读写都按文档说明做修正,
DATE(1900,2,29)返回 1900-02-28 而不是#VALUE!,共享字符串表在跨记录边界遇到内嵌 NUL 字符和双字节代码页时也不会再错位 - 比较运算像 Excel 一样从左到右串联求值,
=1<2<3现在读作(1<2)<3并像 Excel 一样返回 FALSE(比较中 TRUE 的位阶高于任何数字),而过去按1<(2<3)分组并返回 TRUE;比较中空白操作数同时等于 0 和空字符串;通配符条件在COUNTIF和SUMIF的"不等于"上的表现与已有的"等于"完全一致;SUMIF及其同族函数的求和范围改为从左上角单元格扩展出条件区域的形状,不再被截断;INDIRECT会处理第二参数(绝对 R1C1 文本)并拒绝引用之后的无效内容 - basis 为 0 的
YEARFRAC现在应用DAYS360已实现的 NASD 二月末调整,跨二月末的期间计算正确 - 单元格中出现"endstream"字样的文本不会再在流压缩时截断 PDF 页面;跳过压缩时,总页数 token 补丁会保持流长度一致;超过 32 位的对象偏移会明确报错而不是弄坏交叉引用表;灰度或 CMYK JPEG 会标记真实的色彩空间而不是
/DeviceRGB - 数据透视缓存存储被剥离或截断的工作簿,打开时会把受影响的缓存标记为不完整,而不是整个加载失败,并按旧的内联布局重新保存这些缓存而不是报错
- 声明的字符串数量超过记录链实际交付数量的共享字符串表,现在会让打开失败,而不是把剩余单元格悄悄当成空字符串
版本 2.384.2
修复
- 把经典 .xls 工作簿转换为 .xlsx 时,位于较低行中更早合并区域左侧的合并单元格会被悄悄丢掉;扫描不再把已用区域变量复用到合并区域上
- 工作簿扩展列表里的 XML 注释每次保存都会带着成对的
<!--标记重新写出,生成需要 Excel 修复的文件;注释节点现在按字节原样往返 - 从打开的 .xls 中捕获的无法识别的工作表记录,虽然被保留用于重放,却在之后每次保存时被丢弃,且每次打开都泄漏内存;现在它们会通过标准记录写出器原样持久化并重放
- 超过 255 字符的定义名称和超过 65535 字符的名称注释会在保存时破坏 NAME 记录的框架结构;现在两者都会被提前拒绝
- 保存中途因加密不匹配抛出异常而中止时,工作簿和工作表的记录缓冲区会泄漏;现在保存会在所有退出路径上释放缓冲区
- 就地补丁写出器会先删除原文件再把替换文件改名到位,改名失败就会毁掉工作簿;现在交换是单次原子替换,失败时两个文件都保留
- 直接读取器的单元格引用会强制 16384 列和 1048576 行的边界,不再接受溢出的坐标;非法的整数属性回退为默认值而不是中止整个读取;1900-01-01 至 1900-02-28 的日期在两个方向上都按 Excel 的幽灵闰日换算
- 包含制表符、换行符或回车符的属性值原样往返,不再折叠成空格;元素文本中未终结的实体现在与属性分支一样被拒绝
- 4 GiB 及以上的 ZIP 条目无法由复制路径正确组帧,现在会像流式写出器一样拒绝,而不是产出损坏的压缩包
- 语料库运行器现在原子地写出结果,被中断的运行不会破坏保留的证据;它会记录构建超时而不是崩溃,并能容忍损坏的 stage-trace 行;LibreOffice 验证器原子地写出证据,文件替换探针也重新能收集杀毒软件产品列表
版本 2.384.1
修复
- 从第五个字体开始的每个字体都以字体列表末尾后一位的记录索引写出,导致 Excel 修复工作簿、自定义字体回退为默认字体;现在保存和打开都使用文档说明的从零起始索引,自定义字体可以完整往返,Excel 生成的文件在 HotXLS 中打开也能保留字体
- 求值
=0^-1或带小数指数的负数底数时,重算会因浮点异常崩溃,而不是返回#DIV/0!或#NUM! - 从已有 .xls 读出的条件格式表达式规则会以孤立的 CF12 记录形式挂在普通旧式头下重新保存,Excel 会将其丢弃;现在它们保留旧式记录形态和高亮格式
- 引用交集运算符以及调整大小后的
OFFSET和多单元格INDIRECT结果的隐式交集,会走错轴向或拒绝有效的单行、单列区域,返回错误的单元格或#REF! - 读取经典 .xls 文件时,流式行读取器把所有缓存的公式布尔值报告为 FALSE,把所有缓存错误报告为
#NULL! - 复合文件容器超出头部常驻 109 个 FAT 扇区的大型 .xls 文件无法用自包含复合文件读取器打开,原因是 DIFAT 扩展链从未被跟进
- 自定义表格样式重新加载填充色和字体色时红蓝通道互换,保存的样式会以错误的颜色出现
- 工作簿内嵌的畸形 PNG 图片可能在 PDF 图片嵌入期间通过越界写入或无界的文本块扫描使进程崩溃;现在内嵌 PNG 会做尺寸检查,非法块会被拒绝
- 多矩形 EMF 区域按外接框渲染,没有显式视口范围的 EMF 图片缩放错误,上标文本在画布、打印和图元文件输出中渲染到基线以下
- 自动设定优先级的 BIFF 条件格式规则全部带优先级 1,Excel 会将其标记为需要修复;自动优先级现在与 XLSX 一致,按工作表唯一
xlSlantDashDot边框样式在经典 .xls 边框输出中被写成xlDashDotDot- 被截断的加密工作簿头记录会从
Open抛出异常而不是返回密码错误码,解析畸形图片或工作簿文件的多个错误路径会泄漏内存
版本 2.384.0
更改
- 经典 XLS 数据透视缓存按 Excel 的保存方式保存:每个缓存的记录写入各自的存储流,流标识、缓存作用域和工作表或命名区域源定义只在工作簿全局区写一次;旧版本 HotXLS 生成的缓存保持原先的内联布局,除非启用可选的框架升级
- 带密码保护的工作簿中,每个数据透视缓存流作为独立的记录流加密,从流开头重新开始,而不是延续工作簿流的加密位置
修复
- 保存一个混合了从现有文件读取的缓存与代码中创建的缓存的工作簿后,数据透视表可能指向错误的缓存;视图到缓存的引用现在遵循实际的保存顺序
- 所有 HotXLS 包仍携带 2.379.7 的版本资源,在 C++Builder 中重建包还可能把版本资源整个剥掉;现在所有包都携带当前版本
版本 2.383.4
修复
- 深度公式审计中,即使变化落在报告容差之内,依赖公式也能拿到变化后的结果,显式应用会刷新这些未上报的结果
- 两个工作簿引擎对双精度缓存结果都遵循相对容差,未变化的结果不做重复比较
版本 2.383.3
修复
- 基于文件的工作簿保存现在在已完成的 XLSX、XLTX 或 ODS 输出无法替换目标文件时保留 Windows 原生错误,包括清理或进度回调改变线程错误状态的情况
版本 2.383.2
修复
- 重复的报表带和区域复制复用定义名称后缀搜索,不再重扫此前每一次复制,同时保留首个可用名称、工作表作用域以及后续编辑释放名称的复用
版本 2.383.1
修复
- 公式依赖重建避免反复扫描前方的公式行,在保留数组输出引用、跨表依赖和查找顺序的同时降低大型计算链的开销
版本 2.383.0
新增
- 不含宏的 Excel 模板可以通过显式选择输出格式保存为 XLTX,支持文件或流、缓冲或流式输出
- 模板输出保留公式、定义名称、打印区域和工作表元数据,同时不改变默认的工作簿保存行为;包含 VBA 的工作簿会在写入目标之前被拒绝
版本 2.382.5
修复
- 保留注音设置中的默认字体索引,避免省略必填属性导致 Excel 拒绝打开保存后的工作簿
- 动态打印区域公式及已限定工作表的区域集合正确往返,不再给函数添加工作表前缀或截断函数内部的引用
- 模型写出的部件与保留部件共存时不再产生重复的内容类型声明,自定义属性与缩略图等根关系使用独立标识
版本 2.382.4
修复
- 标量公式中的命名区域按当前行或列读取隐式交集,范围参数仍保留完整区域,避免贷款模板重算出现虚假循环和错误值
- 混合整数与浮点数的公式运算保留浮点精度,不再意外截断到四位小数
- 重算时优先完成查找区域中的公式,再读取查找缓存,避免还款期数等结果沿用过期值
版本 2.382.3
修复
- AGGREGATE 正确处理尚未计算的错误值和嵌套聚合,内外层筛选选项相互独立,计算数组不再被误当成单个数值,统计分支保留原始错误类型
- Classic XLS 保存保留已有公式缓存,显式重算才刷新已有值;共享及数组公式保留根单元格缓存,共享公式的相对引用随目标单元格正确平移
- 结构化引用正确处理带反斜杠和点的表名、嵌套当前行语法及转义列名,不再改写公式字符串中的相似文本
- XLSX 条件格式保留正确颜色、显式关闭的粗体和斜体、下划线类型、字体名、字号及字体方案
- 未修改的图表保留原始定义和非零锚点偏移,避免重存导致系列颜色对调或图表位置及大小变化
- 仅设置页边距时不再写入未指定的页面方向,Classic XLS 也会保留导入文件中缺失的页边距,而不是补写会改变打印位置的默认值
版本 2.382.2
修复
- 包含大段重复空白行区域的 ODS 工作簿在打开和保存时,不再把每一行的行高和继承的空白单元格样式展开成一个个独立对象
- ODS 输出保留显式行高和紧凑的重复样式行,包括单行覆盖和已清除的行高;行高范围在工作表复制、行插入与删除、平铺以及 XLSX 导出之后也依然保留
版本 2.382.1
修复
- 列设置覆盖全表宽度的 XLSX 工作簿在打开和保存时不再反复扫描列元数据,也不再复制不断增长的列 XML,日期和模板工作簿的 round-trip 超时就此消除,列设置原样保留
- ODS 数据透视表定义保留继承来的 XML 命名空间声明(包括生成器扩展留下的),保存出来的 XML 依然格式良好
版本 2.382.0
修复
- 保存 Classic XLS 工作簿时,嵌套的
SUBTOTAL单元格不再混入外层分类汇总结果,保留原有的缓存合计值,而不是把分组行重复统计一遍 - XLSX 图表现在只通过各工作表引用的绘图关系加载,未被引用的常规绘图部件无法再在 round trip 中复制出重复的图表
- OpenDocument 的 data-pilot 表定义在 ODS 保存后完好保留,包括源区域、字段、目标区域、按钮以及生成器扩展属性
AGGREGATE的 0-7 选项现在在引用和数组两种计算形式下都遵循文档规定的隐藏行、错误值和嵌套SUBTOTAL/AGGREGATE筛选规则
版本 2.381.0
新增
- 表格 Slicer(Excel 2013+):
Worksheet.Slicers.Add(Table, ColumnName)可以为任意表格列端到端地创建 Slicer 视图——背后名为Slicer_<column>的 slicer cache、保留的#N/Adefined name、工作表的slicerList扩展,以及带 fallback 提示的 markup-compatibility 绘图锚点(供旧版 Excel 兜底读取)全部自动写出;视图的位置、标题和样式可通过Caption、ColumnCount、StartItem、StyleName、RowHeight和SetBounds控制 - Slicer 的 round-trip 模型:打开文件时 slicer 视图和 cache 会解析回来(共享 cache 在多个视图间复用,删除最后一个视图时其 cache 一并删除),未修改的 slicer 部件和锚点逐字节原样重放,而且即使保存时对全工作簿的 table id 重新编号,表格 cache 的表格绑定依然有效
修复
- 早期版本写出的 Slicer cache 引用的是打开文件时记录的 table id;保存时全工作簿的 table id 重新编号后,过期的
tableId可能让 Excel 进入修复流程。现在这个绑定会跟随重新编号过程持续追踪对应的表格
版本 2.380.0
新增
- Waterfall 和 Treemap 图表:Excel 2016 的这两种扩展图表类型现在可以创建、保存并重新打开。它们会序列化为专用的 extended-chart 部件,各自带有自己的 content type、工作表数据绑定,以及带 fallback 提示的 markup-compatibility 绘图锚点,供旧版读取器兜底
- Treemap 图表支持层级类别:系列的每一级类别都会作为 category dimension 中自己的一层写出并读回,叶子节点和父节点的标签都得以保留
版本 2.379.4
修复
- 损坏或恶意的经典 XLS 容器在打开时不再破坏内存。复合文件读取器过去会把整个扇区复制进迷你流,即使其中只有一部分属于该处;会沿着迷你分配表追踪到该流结尾之外;会接受格式未定义的扇区大小;还会依据未经检查的计数决定分配表的大小。扇区与迷你扇区链现在都有循环防护,填满自身字段却没有终止符的流名称也会被限定长度
- 指定超出格式表范围的单元格格式索引的样式记录,不再通过该索引写入。共享格式和键列表中的引用计数过去只检查下限,因此文件中的 12 位索引可能越过数组
- 以 ZIP64 扩展信息写入的本地文件头不再溢出其缓冲区:声明的头大小现在会计入写入器追加的 28 字节额外字段。条目偏移与流位置改用 64 位值跟踪,ZIP64 条目改用从其额外字段取得的长度而非哨兵值来读取,超过 4 GiB 的条目则会被拒绝,而不是只记录其余值
- 包含 Windows 分隔符的 ZIP 条目名称会被规范化。单个反斜杠过去从未被转换为正斜杠,因此
..\..\name能通过按正斜杠切分的目录遍历检查 - 没有上限的掩码范围(例如
[a-)不再读取超过掩码结尾,构建以字符集合开头的掩码时也不再每个掩码泄漏一个集合。两者都能通过 COUNTIF 和 SUMIF 条件触发 - 使用通配符搜索整个单元格时,现在要求模式必须匹配整个单元格,与文档描述的行为以及无通配符时的整单元格比较一致。
FindText使用模式abc时,过去也会匹配含有abcdef的单元格 - 「以显示精度为准」不再对数字格式中没有数字占位符的单元格进行舍入。过去名称指定为
General、以@指定为文本,或使用仅含字面值格式的单元格,会被舍入成整数 - 共享字符串表报告的唯一字符串数量不再超过其实际写入的数量,不再把已删除字符串的富文本 run 附加到重用其位置的其他字符串上,也不再在字符串仅因其格式化尾部而溢出时,发出只含选项字节的续段记录
- RTF 导入不再重复非 ASCII 字符。
\\uN转义后面会跟着以\\'hh形式写出的后备字符,跳过逻辑过去无法识别它们,因此每个字符又被当成文本输出一次。被跳过的组现在会遵守\binN的原始负载,宽度或高度超出工作表网格的表格会在边缘停止,而不是抛出异常 - 超出 XML 所定义字符范围的数字引用会在读取时被拒绝,而不是产生内嵌的 NUL、孤立代理项或回绕的码点。制表符、换行符和回车符会以字符引用的形式完好历经 OPC 往返,而不是被规范化为空格
- CSV 导入会在多次解析之间保留
SkipRows值;该值过去会被就地递减,因此通过同一加载器读取的第二个文件什么都不会跳过 - 在决定要保留哪些部件时,现在能够识别
xl/tables/部件;过去的前缀比较少比了一个字符,因此从未匹配
版本 2.379.3
修复
- HTML 导入会解码十进制字符引用。
é以及其他所有&#NNN;形式产生的都是 NUL 字符而非字符本身,因为转换把结果和错误位置写进了同一个变量,成功码又覆盖了该值。十六进制引用不受影响;现在两种形式都会拒绝超出可表示范围的值,而不是输出莫名字符 - HTML 导出在构建内部超链接的锚点目标时,会保留完整的子地址。长度超过 255 个字符的子地址过去会被截断,导致生成的锚点不再与链接匹配
版本 2.379.2
修复
- 通过
AddPicture或Images.AddFromFile插入的 GIF 现在会从逻辑屏幕描述符获取大小。过去每个 GIF 都报告 100 乘 100 点,无论实际尺寸如何,因此图片会被拉伸或压扁 - BMP 尺寸判读会读取文件实际声明的位图头:具有 16 位尺寸的
BITMAPCOREHEADER现在能被正确理解,而不是被当成 32 位字段读取,具有负高度的 top-down BMP 也不再产生负的图片高度 - JPEG 尺寸判读接受所有 SOFn 帧标记,而不只是 baseline、extended sequential 和 progressive。过去无损、算术编码和层级式 JPEG 都会落到 100 乘 100 的默认值
版本 2.379.1
修复
- WMF 图片现在会解码为矢量场景,用于 SVG、PDF 和分页输出。从 2.363.0 起,解码器把每条记录读成 16 位大小加函数代码,但图元文件记录以 32 位大小开头,因此 Windows 或 Office 写出的每个 WMF 都停在第一条记录,图片也退回位图占位符。记录现在会按
[MS-WMF] §2.3分界,画笔、画刷、字体、文本、形状和多边形参数也会从指定的偏移读取 META_STRETCHDIB过去预期 DIB 位于目标矩形之前,并假设 40 字节的位图头;现在矩形会按格式规定位于 DIB 之前,寻找像素位时会遵循BITMAPV4HEADER/BITMAPV5HEADER与颜色表,且该记录会在XDest、YDest处提供大小为DestWidth乘DestHeight的图像命令META_EXTTEXTOUT在设置ETO_OPAQUE或ETO_CLIPPED任一标志时会跳过其可选矩形,因此以不透明背景绘制的文本不再从错误的偏移读取- 内嵌在页面渲染中的图元文件图像,现在会从位图头所指定位移读取像素,而不是固定的 40 字节,因此
BITMAPV4HEADER或BITMAPV5HEADER图像不再渲染成错位的彩色噪点
版本 2.379.0
新增
TGridToXLS现在是 Free Pascal 运行时包的一部分,Lazarus 的TDBGrid因此能像在 VCL 下那样导出:显式指定的列会保留其标题、字体、颜色、对齐方式、宽度和可见性,没有显式列的网格会为每个数据集字段导出一列,结果则通过同一个SaveAs调用保存为 XLS、XLSX、HTML 或 RTF
版本 2.378.4
修复
- TEXTBEFORE 和 TEXTAFTER 过去从一个从未赋值的局部变量读取参数计数,因此可选的 instance、match-mode、match-end 和 if-not-found 参数可能被忽略,或有效的调用被以 #VALUE! 拒绝,取决于栈中残留的内容;计数现在来自调用本身
- 调整过大小的 OFFSET(高度或宽度不为 1 者)在单个单元格中求值时,会将公式单元格与尚未计算的锚点比较,因此隐式交集可能返回 #REF! 或错误的单元格;位移后的锚点现在会在交集测试之前计算
版本 2.378.3
修复
- 在 Free Pascal 下,匹配或替换空字符串会引发正则表达式错误,因此每当字段为空时,
regexreplace(Code,"[^0-9]","")这类报表表达式就会以REPORT_EXPRESSION_INVALID_REGEX失败。FPC 后端现在的行为与 Delphi 下的TRegEx一致:接受空字符串的模式(例如^$或.*)会匹配空字符串并产出其替换文本,而[0-9]+或\s+则报告不匹配
版本 2.378.0
新增
- 新增 Free Pascal 3.2.2 与 Lazarus/LCL 的 Windows Win32、Win64 支持,可直接使用 XLS/XLSX 工作簿、公式、样式与流式读写接口
- 提供 Lazarus 运行时包
Lib/FPC/HotXLSLaz.lpk、命令行构建build-FPC-Lib.cmd和回归验证入口Tests/Lazarus,支持按目标架构分别构建 - FPC 版使用内置 Pascal 压缩实现处理 ZIP、XLSX 和压缩流,无需额外部署 zlib DLL;保留 PNG 图像和 Windows EMF 绘制能力
版本 2.377.2
新增
- HotXLS 写出的 Classic XLS PivotCache 现在带有缓存头校验所依据的记录。头的流标识和源数据类型过去指向从未写出的 SXStreamID 和 SXVS,任何读取器都无法校验这两者;现在两条记录都会写出,头的两个字段取自相同的值,两者天然一致
- 缓存子流也带有 SXDBEx,即 Excel 写出的每个缓存中紧跟缓存头之后的记录。它记录缓存上次刷新的时间,因此
TXLSPivotCache.RefreshedDate在 Classic XLS 保存并重新加载后也能像 XLSX 中那样保留 TXLSPivotCache.StreamId和TXLSPivotCache.SourceDataType公开这两个值,从声明了它们的文件读回,并写入那对记录和缓存头。由AddPivotTable建立的缓存报告流 0 和工作表区域源
更改
- 可选启用的旧缓存框架重写(
UpgradeLegacyPivotCacheFraming)现在也会产出这三条记录,升级后的缓存不仅框架正确,而且和新写出的缓存一样完整。已带有 SXStreamID、SXVS 或 SXDBEx 的缓存保留原有内容;SXDBEx 声明了 HotXLS 不写出的公式记录的缓存仍走原始重放 - 读取不受影响:本版本之前写入的文件照原样加载,HotXLS 仍没有模型的缓存记录——包括命名源区域的 DConRef 或 DConName——继续在往返中逐字节保留
版本 2.377.1
新增
- 工作簿现可在保存时请求重写旧 PivotCache 子流。默认关闭的 TXLSWorkbook.UpgradeLegacyPivotCacheFraming 启用后,会用修正后的 SXDB / SXFDB / SXDBB 写入器重新发出 HotXLS v2.377.0 前创建的缓存,让既有文件也获得 v2.376.1 至 v2.376.7 的修复
TXLSWorkbook.UpgradeLegacyPivotCacheFraming - 升级仅在可证明无损时进行:只有完整子流均为 HotXLS 已建模记录且框架确为旧版 HotXLS 写错时才重新写入;Excel 创建的缓存和含 SXDBEx 等不透明记录的缓存仍重放原始字节。 TXLSPivotCache.CanUpgradeFraming 、 RawFramingIsLegacy 与 RawModelIsComplete 报告判定依据
TXLSPivotCache.CanUpgradeFramingRawFramingIsLegacyRawModelIsComplete - 升级后的缓存仍写回原子流位置,保存前引用它的 PivotTable 视图仍能解析到同一缓存
修复
- 从文件读取并关闭原始重放后交给写入器的 Classic XLS PivotCache 曾会生成模型和文件各一份子流,现在只生成一份
版本 2.377.0
新增
- Classic XLS 工作表现支持嵌入式图表对象: AddChartObject 在工作表网格锚定图表框,使用共享图表构建器建立子流并随工作表记录写入;重载后仍保留图表模型、系列、标题和区域引用
AddChartObject
修复
- SeriesText 记录现按正确字节宽度解码字符串,16 位标题和系列标签不再被截为一半长度
版本 2.376.7
修复
- Classic XLS 文件中 PivotTable 背后的缓存行现按 [MS-XLS] 2.4.276 写入:每个缓存数据行一个记录,每个缓存字段一个索引,字段少于等于 255 个不同值时一字节,更多时两字节
- HotXLS 曾采用自有位打包方案,把每个字段压缩为仅够计数其值的位数并把多行装进一个记录,其他程序无法解码且与字段定义已有的超过 255 值标志相矛盾
- Excel 现在能读取 HotXLS PivotCache 保存的值,无需在打开工作簿时从源区域重建;源数据已移动、修改或删除的工作簿依赖这一行为
- 缓存行现在也会被读回。此前 HotXLS 完全忽略该记录,加载的缓存每行都指向每个字段的首个值,基于缓存的计算因而使用错误值
- 不含值的缓存字段不会为缓存行贡献索引,含超过 255 个值的字段则按格式要求以较宽尺寸存取;v2.376.6 及更早版本写入的缓存行仍保持可加载
版本 2.376.6
修复
- Classic XLS 的 PivotCache 头记录现按 [MS-XLS] 2.4.275 布局。记录计数是四字节字段,HotXLS 原先写为两字节,导致其后每个字段提前一位且记录多出四字节
- 此前缓存字段数落在记录计数内,标志字落在流标识符上,字段计数又落到最近刷新者名称长度上,声明了该记录过短而无法容纳的名称
- 头标志现说明缓存实际状态:记录是否存于文件、打开时是否刷新、是否允许刷新以及刷新查询是否后台执行,且会与最近刷新者名称一同保存在 Classic XLS 中
- 头内源数据类型现在写为工作表区域,字段计数和已用记录计数带有缓存真实总数;刷新者名称会截断至记录允许的 255 个字符,缺失名称不写空占位符
- v2.376.5 及更早版本的工作簿仍可加载并保留缓存记录计数。旧头从未保存其他值,因此标志和刷新者名称以默认值而非恢复值呈现
版本 2.376.5
修复
- PivotCache 字段名现在能在 Classic XLS 保存和重载后保留。原先字段名长度从缓存字段定义中恒为 $FFFF 的索引读取,所以每次都会丢失名称
- 缓存字段定义记录现按 [MS-XLS] 2.4.283 的 grbit、ifdbParent、ifdbBase、citmUnq、csxoper、cisxoper、catm 及字段名布局
- HotXLS 曾写入格式不存在的子类型项目索引、数字格式和第二项目计数,并向规范按缓存字段数限定的索引写入 $FFFF
- 记录标志字现在描述所属字段:是否含缓存项目、是否含数字日期或文本、能否计算最小最大值、是否存在非日期项目及项目数是否超过 255;项目计数与后续缓存项目记录数一致
- 超过记录允许 255 个字符的字段名会截断为 255;v2.376.4 及更早版本写入的字段名仍完整加载,因为旧布局中的名称位置相同
版本 2.376.4
修复
- Classic XLS PivotTable 缓存现使用 [MS-XLS] 定义的 SXFDB、SXFDBType、SXDBB、SXNum、SxBool、SxErr、SXDtr 与 SxNil 记录号,因此 Excel 与 HotXLS 可互相读取缓存
- 缓存字段中的空值现可往返保留,不再在加载时丢弃并使后续项目引用错位
- v2.376.3 及更早版本写入的缓存仍按各自的旧记录编号读取和重写,重开保存旧工作簿不会悄然改变其字节
版本 2.376.3
修复
- Classic XLS PivotTable 视图的 SXEx 扩展记录现使用 [MS-XLS] 指定的 $00F1,不再误用 PivotCache 头记录 SXDB 的 $00C6,视图属性不会丢失
- v2.376.2 及更早版本的工作簿仍可完整打开:工作表内旧 $00C6 仍作视图扩展接受,缓存子流内仍作缓存头读取
版本 2.376.2
修复
- 未显式指定场景的 Classic XLS 3-D 图表工作表现在会设置自动缩放位而非保留位,默认 3-D 图表重开后可保持其声明的场景;显式 3-D 场景的输出不变
版本 2.376.1
修复
- PivotTable 视图的 SXEx 记录字段现位于读取器预期位置,固定 24 字节主体不再偏移,并将可选字符串标记为缺失以符合 [MS-XLS] 2.4.282
- SXEx 长度由实际写入字节推导,不再使用可能与载荷脱节的硬编码常量
版本 2.376.0
新增
- Classic XLS 图表工作表可以链接到数据透视表视图:新的
AddChartSheet重载接受源透视视图名称和隐藏字段标题标志,按 Chart Sheet Substream ABNF 在 Units 之前写入图表全局区的 SXViewLink($0858,[MS-XLS] 2.4.316)和 PivotChartBits($0859,2.4.196)记录;图表检查会把这两条记录——包括 8 位和 16 位字符串编码——解码回类型化模型(透视图标记、源视图名称、标题标志)和规范化语义快照,没有链接记录的图表保持未标记
修复
- 数据透视表视图会写出尺寸正确的 SXEx 记录:写出器声明了 24 字节的主体却写了 26 字节,多出的两个字节落在预期下一条记录头的位置,视图之后的每条记录(包括工作表 EOF 和其后跟随的任何图表工作表子流)都解析错乱,同时包含数据透视表和图表工作表的工作簿重新打开时图表因此丢失
- 经典图表中的趋势线显示名称现在能正确解码 8 位字符串载荷;之前的宽字符读取器对 Excel 以 8 位字符写出的记录会返回空名称
版本 2.375.0
新增
- Classic XLS 图表系列现支持主题色填充:系列样式保存主题颜色索引和 tint,并经 GelFrame OfficeArt 主题色扩展写入,图表检查可将主题意图还原到类型化模型
修复
- 所有受支持编译器的多版本库构建重新通过,XE5 至当前版本中仅新编译器接受的转换、重载解析和 VCL/GDI+ 差异均已按版本安全处理
版本 2.374.0
新增
- 3-D 图表场景现可配置和检查:新的 AddChartSheet 重载接受旋转、仰角、透视、尺寸及场景标志并写入 Chart3d,读取时以 Scene3D 还原;旧重载仍逐字节产生 Excel 默认值
AddChartSheetScene3D
版本 2.373.0
新增
- Classic XLS 图表系列现支持按系列覆盖线条颜色和样式、填充颜色及标记形状、颜色和大小,图表检查会把 LineFormat、AreaFormat 和 MarkerFormat 还原到类型化模型
版本 2.372.0
新增
- Classic XLS 图表系列的类别和值现可使用命名或外部引用:非普通 A1 区域的文本会经工作簿公式引擎编译并写入 BRAI,读取时还原名称,无法解析的文本仍保持空 BRAI 占位符
版本 2.371.0
新增
- Classic XLS 图表系列现可绑定次坐标轴组; AddChartSheet 会将 AXESUSED 设为二并写入第二个 AxisParent 组,图表检查会读取每个系列的图表组绑定
AddChartSheet
版本 2.370.0
新增
- Classic XLS 图表系列现支持数据标签: AddChartSheet 写入 AttachedLabel,图表检查会把标签显示标志及 DataLabExtContents 分隔符还原到类型化模型
AddChartSheet
版本 2.369.0
新增
- Classic XLS 图表检查现可解码坐标轴组结构:AXESUSED 提供声明的组数,每个轴都会标示所属的主或次 AxisParent 组并写入规范语义快照
版本 2.368.0
新增
- BIFF 图表趋势线和误差线现在会在读取时解码到类型化图表模型,包含回归类型、阶数或周期、截距、方程式和 R 平方显示、预测与回溯、显示名以及误差线方向、值类型、端点和幅值
- Classic 语义快照会把趋势线和误差线映射到共享规范容器,含高级图表系列的工作簿可稳定比较
版本 2.367.0
新增
- RecalcAndVerifyEx 在两种工作簿引擎上执行深度计算审计:每个公式经依赖图一次性计算到隔离结果覆盖层,失败按类型分类并带结果代码和有界调用栈
- 审计支持稳定排序的问题预算、可在节点边界取消的进度接收器、数值容差及选择启用的 ApplyResults 原子提交,默认严格只读
更改
- 既有 RecalcAndVerify 和 CalculateAndVerify 入口保留原有浅比较语义作为兼容层,同时共享新的报告字段
版本 2.366.0
更改
- PDF 导出改用顺序对象写入器,所有对象直接流向目标而不建立整份文档中间副本;签名文档使用有界暂存区处理 ByteRange 和签名内容补丁
- 附件载荷从提供者暂存区以固定块复制,并通过间接长度对象引用流大小,多百 MB 附件的峰值内存保持平坦
修复
- 签名摘要现增量覆盖组合文档的两个字节范围,并从签名对象本身定位保留字段,不再扫描整份组合字节
版本 2.365.0
新增
- 可见 PDF 签名文本现通过嵌入 Unicode 字体管线渲染,支持左中右对齐、大小、颜色、粗体和斜体,签名者、原因和地点可使用任意文字
- PDF 签名外观图支持 JPEG,尺寸由框架标记推导,过大或损坏的图像会在计算摘要前稳定失败
- PDF 附件提供显式重名策略,大载荷会在可配置阈值后暂存到临时文件,并拒绝含路径分隔符或控制字符的名称
更改
- PDF 附件名称树现按 ISO 32000-1 7.9.6 的编码名称字节排序,提供者运行期间附件集合冻结,重入添加会原子失败
版本 2.364.0
新增
- 嵌入的 EMF 和 WMF 图片现可通过精确的弧转 Bézier 转换重放路径括号、圆角矩形、弧、弦、饼图和角弧、区域填充与边框以及扩展画笔,并以相同的安全白名单边界写入不可变共享场景
版本 2.363.0
新增
- 嵌入 EMF 和 WMF 图片通过扩展安全记录白名单重放:设备上下文状态栈、窗口和视口映射及世界变换、画笔和画刷对象、矩形、椭圆、线条、多边形、Bézier 曲线、有界文本和受限 stretch-DIB 图片,未知状态仍安全地回退为有界栅格化
修复
- WMF 图片现按标准双字节记录头解析,真实的 placeable 和标准图元文件不再只剩合成测试夹具可解码
版本 2.362.0
新增
- Classic XLS 和 XLSX 现在通过各自的二进制或 OOXML 表示保留表公式数组状态、类型化数据验证 IME 模式、计算线程提示、强制完整计算标记、全部刷新提示以及工作簿代码名称
RecalcAndVerify返回有边界的结构化计算审计,提供稳定的缓存、解析、缺失函数和缺失名称类别,同时不改动公式缓存和工作簿语义TXLSPageImageExporter.ExportRange把请求的单元格矩形渲染为一张紧凑的 PNG 或 JPEG,不带纸张、页边距、页眉、页脚、打印标题或分页符,页面图片的前后事件可以在实际编码画布上作画- 专用的单元格图片导出器可测量、渲染并把任意经典或 XLSX 单元格矩形保存为单张紧凑图片,分辨率、缩放、格式和 JPEG 质量均可配置;支持透明或有色背景、对象/网格线/单元格边框独立开关、像素与字节预算,并通过同文件夹原子替换保存文件,任何一步失败都不会碰已有目标
- 页面图片绘制事件现在收到完整的只读上下文,携带实时画布、像素边界、以点为单位的页面尺寸、分辨率、缩放、文档页码和工作表内页码、总页数以及来源工作表;包括多页 TIFF 帧在内的每个渲染帧恰好触发一次,测量期间保持静默,且前置事件抛出异常时绝不触发后续事件或写出不完整的图片字节
TXLSSvgExport支持完整的按页回调、确定性的文档与页面 ID 命名空间,以及可选启用的安全超链接覆盖层(带 ScreenTips 和安全的新窗口属性)- 经典和 XLSX HTML 导出器提供可选的电子表格视图,带语义化行列标题和有边界的纯 CSS 悬停跟踪,两者都拒绝 active 或本地 URI 方案,同时保留链接显示文字
- 可见 PDF 签名可以使用 contained、covered 或 stretched 的 PNG 外观图片,PDF 附件可以在每次保存时通过单次调用的源接口惰性获取载荷
- 有边界的 EMF 和 WMF 矢量解码器会校验文件头、记录大小、总数、EOF 的确切位置和转义限制,然后通过共享的 Canvas 和 SVG 后端重放其安全的矩形命令子集,不调用驱动图元文件回放
更改
- 直接 XLSX 写入可以编写表公式数组属性和类型化数据验证 IME 模式,数组表公式不再被悄悄展开为按行的标量公式
版本 2.361.99
更改
- 自动标记 PDF 现将有用的 XLSX 图片输出为带 Unicode 替代文本的独立 Figure 结构元素,使用密集页面局部标记内容标识符和精确父树;无替代文本图片仍为装饰性 artifact
版本 2.361.98
修复
- 扫描范围覆盖自身单元格的查找公式(VLOOKUP、HLOOKUP、LOOKUP、XLOOKUP、XMATCH、MATCH)在重算期间不再误报循环引用错误,同时被扫描范围内的编辑仍会触发该公式重算
- 超过 255 字符的 AutoFilter 文本条件会截断到筛选记录上限,而不是写出损坏的自动筛选条件
- 重新生成公式文本时,隐式交集运算符所用的连续空格会被保留,不再折叠成单个空格
- 打印区域、打印标题和筛选数据库之外的内置定义名称(consolidate areas、extract、database、criteria、recorder、sheet titles 和 Auto_Open 族标记)在经典 XLS 工作簿打开和保存时原样保留
版本 2.361.97
新增
- Classic XLS 和 XLSX 现提供共享三态对象显示策略并无损保留未修改源;隐藏对象不会扩展分页或 HTML 输出,也不会进入绘图与媒体渲染路径
- 工作簿查看器会为占位模式对象绘制轻量级命名框,PDF、SVG、位图、打印和 HTML 导出默认保留完整对象,并可选择避免图像解码和图表场景构建的占位输出
版本 2.361.96
更改
- 手动图表布局现独立保留源字段和无效 token,以有界且保尺寸的方式解析因子和边缘坐标,支持内外绘图区、标题和图例叠加,并在所有渲染输出中保持一致位置
版本 2.361.95
更改
- XLSX 单元格来源的图表数据标签现归属各系列,保留完整公式、索引缓存、共享及逐点可见性、实时刷新、外部缓存回退和复制期间公式转换,并在各导出路径一致合成标签
版本 2.361.94
更改
- 多层图表分类轴现保留稀疏分层缓存和实时二维区域,线性构建父级感知跨度,支持单层、反向、从右到左、隐藏与空分类行为,并在所有渲染输出中保持层级标签和分隔符一致
版本 2.361.93
更改
- 日期轴现基于全部可见系列一次性推断日历单位,按可见跨度、轴宽、标签字体、数字格式和旋转选择有界自动间隔,并从共享主副刻度集合导出标签、坐标、刻度和网格线
版本 2.361.92
更改
- XLSX 日期轴现保留轴数字格式和源链接状态,以文字样式和旋转渲染格式化标签,并支持反向方向及重复或稀疏日期的连续间距
版本 2.361.91
更改
- XLSX 日期轴现区分基础、主和次日历单位及自动分类检测是省略还是显式提供,Classic 日期轴扩展记录公开类型化字段并可映射活动设置到 XLSX 轴模型
版本 2.361.90
更改
- XLSX 日期轴图表现保留连续日期间距,并在分页、SVG、PDF、图像、预览、打印、查看器和 HTML 输出中按工作簿 1900 或 1904 日期系统渲染日、月或年主间隔,同时遵循配置的次刻度和网格线
版本 2.361.89
新增
- 此处说明对应 HotXLS 功能的配置、兼容性与运行时行为
ExportSheetBackgroundImages
更改
- 本节内容已按中文文档说明
版本 2.361.88
新增
- 本节内容已按中文文档说明
版本 2.361.87
修复
- 本节内容已按中文文档说明
版本 2.361.86
新增
- 此处说明对应 HotXLS 功能的配置、兼容性与运行时行为
AllowUnsafeFormulaCallbacksxlfeUnsafeFunctionDenied
安全
- 本节内容已按中文文档说明
版本 2.361.85
新增
- 此处说明对应 HotXLS 功能的配置、兼容性与运行时行为
AuditFormulaSymbols
更改
- 此处说明对应 HotXLS 功能的配置、兼容性与运行时行为
#NAME? - 本节内容已按中文文档说明
修复
- 本节内容已按中文文档说明
版本 2.361.84
新增
- 经典 XLS 和 XLSX 的常规公式赋值现在会原子地应用工作簿公式录入策略,因此严格拒绝会使单元格值、公式缓存和依赖项保持不变,而保留模式会存储未知的函数和名称
更改
- 经典 XLS 通过 BIFF 加载项用户函数标记写入保留的未知调用,并在保存、重新打开和 XLS/XLSX 转换过程中保留已保留的未知名称文本
- 公式录入验证可识别已配置的回调用户函数、 LAMBDA 和 LET 可调用对象、定义名称 lambda、报表占位符、已注册的外部链接和有效的结构化引用,而无需调用处理程序
LAMBDALET
修复
- XLSX 验证现在会保留有效的嵌套和当前行结构化引用,并且在扫描未解析的表引用时不再复用过期的列文本
版本 2.361.83
更改
- 经典 XLS 和 XLSX 的值赋值现在会一致地应用 FormulaEntryPolicy.EmptyStringMode :默认模式清除精确的空字符串,保留模式存储一个常量空字符串,而 Null 或 Unassigned 总是清除单元格
FormulaEntryPolicy.EmptyStringModeNullUnassigned - 原生 XLS、XLSX 和 ODS 加载以及 XLS 到 XLSX、XLSX 到 XLS 的转换现在会保留可信的常量空字符串,而不会将其与不存在的单元格或 ="" 之类的公式混淆
="" - XLSX 字符串和 Variant 行或列写入器保留打包存储的快速路径,同时让已清除的条目保持缺席,并且仅在保留模式下存储精确的空字符串
版本 2.361.82
新增
- 经典 XLS 和 XLSX 工作簿现在暴露共享的 FormulaEntryPolicy ,两个工作表引擎都提供不产生修改的 ValidateFormulaEntry 方法,在调用方更改单元格之前返回结构化的问题、动作和未知符号
FormulaEntryPolicyValidateFormulaEntry
更改
- 公式录入验证现在会区分精确的空输入与返回空字符串的公式,区分未知函数、未知名称、语法失败、无效目标和目标格式限制,并识别已注册的用户函数而无需调用其处理程序
版本 2.361.81
更改
- 整行和整列的插入或删除现在会在 XLS 和 XLSX 中一致地重新映射每个窗格的有序选区和活动区域,保留存留区域的顺序,并在所有区域都被移除时创建边界单元格回退
- 大型窗格选区的规范化、结构性编辑和查询现在使用均摊线性的构建器和容量增长,而不是重复的完整字符串或数组复制
修复
- 经典 XLS 现在会逐字节保留畸形或自相矛盾的 Selection 记录体,并报告 xlsDiagnosticSelectionRecordInvalid ,而不是暴露部分可信的类型化状态
SelectionxlsDiagnosticSelectionRecordInvalid
版本 2.361.80
新增
TXLSWorksheetTXLSWorksheet 和 TXLSXWorksheet 现在暴露对应的 TryGetWindowScroll 和 ScrollWindow 方法,用于使用从 1 开始编号的坐标读取和更改任何现有逻辑窗格的第一个可见单元格TXLSXWorksheetTryGetWindowScrollScrollWindow
更改
- 四窗格滚动状态现在会在 XLS 和 XLSX 的保存、打开和工作表复制过程中独立保留共享的上、下、左、右轴,而缺失的窗格和无效坐标会失败且不更改视图状态
版本 2.361.79
更改
- 经典 XLS 工作表为每个窗格保留独立有序的选区组,将连续的 BIFF Selection 记录聚合为一个逻辑序列,保留未触动的记录体,并在复制工作表时复制完整的选区状态
Selection - 超过 1369 个区域的经典选区会以连续的符合标准的块写入,同时在每个块之间保留一个聚合的活动区域索引
版本 2.361.78
新增
TXLSWorksheetTXLSWorksheet 和 TXLSXWorksheet 现在通过共享的 TXLSPanePosition 类型暴露对应的感知窗格的 GetSelectedAreas 和 SelectAreas 方法TXLSXWorksheetGetSelectedAreasSelectAreasTXLSPanePosition
更改
- 窗格选区查询返回由调用方拥有的有序快照(包含活动区域索引),保留重叠的区域,并在窗格不存在或更新无效时保持工作表状态不变
版本 2.361.77
新增
IXLSWorkbookIXLSWorkbook 、 TXLSWorkbook 和 TXLSXWorkbook 现在暴露对应的流式 SaveSemanticSnapshot 和增量 SHA-256 ComputeSemanticHash 方法,带有 Content 和 SecurityComplete 剖析,以及显式的查看器状态、易失性元数据和公式缓存选项TXLSWorkbookTXLSXWorkbookSaveSemanticSnapshotComputeSemanticHash
更改
- 语义快照遍历稀疏的工作簿模型而无需物化完整的快照,并且快照和哈希操作都持有读取租约,因此并发的公开修改会在更改工作簿状态之前失败
版本 2.361.76
新增
- 类型化的经典 XLS 图表模型现在暴露图表、类别轴和数值轴标题
修复
- 经典 XLS 图表模型提取现在会从其定义的 BIFF 记录中识别系列、图例、图表组、坐标轴、3-D 状态、系列标签和系列源公式
- 图例位置和饼图与圆环图的区分现在从其定义的记录字段中解码
版本 2.361.75
新增
- Delphi FeatureShowcase 和 C++Builder XlsxFeatureGallery 现在演示相同的编译报表数据上下文、内存表、严格数据访问、可恢复错误继续执行、诊断工作表、不可变运行结果和原子文件输出工作流
- 编译报表主题现在提供对应的 Delphi 和 C++Builder 示例,包括接口化报表表所需的 C++Builder 智能接口获取
修复
- C++Builder XLSX 功能画廊现在链接完整的版本匹配的 HotXLS 静态包,使编译报表的实现依赖得以解析,而无需脆弱的每单元链接器指令
版本 2.361.74
更改
RunToStreamRunToStream 、 RunToFile 和 RunToEncryptedFile 现在共享一个输出事务,仅在报表生成和保存完成后才发布序列化的工作簿RunToFileRunToEncryptedFile- 未加密的报表输出会保留模板工作簿格式,包括从 ODS 模板生成 ODS 输出,而加密输出仍为加密的 Office 容器
修复
- 序列化、替换、取消和致命报表失败会使现有的目标流、文件和加密文件保持不变,并在返回之前释放每次运行的数据会话和临时存储
版本 2.361.73
新增
- 命名区域和 Excel 表报表带现在暴露 ErrorMode 、 StrictDataAccess 、 RuntimeLimits 和不可变的 LastResult 快照,并带有独立的 CompletedWithErrors 报表带状态
ErrorModeStrictDataAccessRuntimeLimitsLastResultCompletedWithErrors
更改
WriteAndContinueWriteAndContinue 可将显式可恢复的行错误写为字面诊断文本,记录源光标行和实际输出单元格,然后继续处理该行中较后的目标和较后的输入行- 报表表达式先使用类型化的报表带快照值,再回退到文本,在表达式求值期间保留数值、日期、布尔和其他受支持的 Variant 值
修复
- 报表带展开期间的致命目标、取消和运行期限制失败会恢复源目标和已插入的结构,清除已回滚的诊断标记,并发布零个已应用的目标
版本 2.361.72
新增
TXLSReportRuntimeLimitsTXLSReportRuntimeLimits 可限制运行期问题的保留数量、脱敏消息的长度以及问题占用的内存; RuntimeDiagnosticsSheetName 还可选择写入一张结构化的诊断工作表RuntimeDiagnosticsSheetName- 显式的解析器数据错误、表达式除零和无效正则表达式现在都会携带稳定的服务提供方或表达式问题类别与错误代码
更改
WriteAndContinueWriteAndContinue 会保留安全的非单元格目标并记录其问题,而工作表名称和定义名称公式仍作为快速失败的结构性目标- 从每次运行的别名缓存中提供解析器数据错误结果时仍可恢复,而解析器抛出的异常依旧是致命错误
安全
- 运行期消息在第一行处截断,对常见的凭据与持有者令牌形式进行脱敏,并在修改出错目标之前强制执行数量、长度和内存限制
版本 2.361.71
新增
- 精确匹配的 {{#usertable(alias, logicalName, providerKey, name=expression)}} 单元格会编译为类型化的惰性表声明, TXLSCompiledReportTemplate.UserTableCount 则独立于输出目标单独报告声明数量
{{#usertable(alias, logicalName, providerKey, name=expression)}}TXLSCompiledReportTemplate.UserTableCount TXLSReportTemplateChecker.DataContextTXLSReportTemplateChecker.DataContext 可在不调用解析器的情况下预检已注册的提供程序键、类型化参数边界、畸形声明以及不区分大小写的别名冲突
更改
- 报表模板和生成器会在写入目标之前求值声明参数,将其注册到当前运行会话,并且仅当 dbvalue 或 dbcount 首次引用某别名时才解析已声明的表
dbvaluedbcount - 重复且相同的声明共用同一个请求;若声明复用别名但逻辑名称、提供程序、参数顺序、类型或值不同,则会在修改工作簿之前失败并给出声明所在单元格的位置
安全
- 用户表声明只接受已注册的提供程序键和有界的类型化数据参数,拒绝在参数表达式中访问数据表,也不暴露任何可用于 SQL、路径、URL 或命令文本的模板字段
版本 2.361.70
新增
TXLSReportDataRequestTXLSReportDataRequest 会将命名表或用户表标识、类型化参数、源位置和只读运行控制传递给 IXLSReportDataResolver ,其显式的结果状态可区分未处理、已解析、未找到和数据错误几种结果IXLSReportDataResolverTXLSReportDataContext.RegisterResolverTXLSReportDataContext.RegisterResolver 、 RemoveResolver 和 ClearResolvers 管理一个不区分大小写的具名解析器注册表,而 TXLSReportDataLimits 则对别名、解析器、参数、名称、消息和返回的表架构设定上限RemoveResolverClearResolversTXLSReportDataLimits
更改
- 每个报表数据会话都会将解析器注册表快照为 O(1) 查找结构,保持显式表的权威性,适配旧式表提供程序,按别名缓存类型化请求,并拒绝复用逻辑名称、提供程序、参数顺序、类型或值有所不同的别名
- 报表运行器和报表带现在会通过数据解析传递一个线程安全的取消控制,取消后即停止且不提交当前目标,并让被取消的别名保持可干净重试的状态,而不是把取消当作数据错误缓存下来
安全
- 类型化数据请求会拒绝控制字符、负的源坐标、重复的参数名、不受支持的 Variant 数组或引用、过长字符串、过多的别名或提供程序以及过大的表架构,且这一切都发生在执行不安全操作或修改工作簿之前
版本 2.361.69
新增
TXLSXWorksheet.ClearRowHeightTXLSXWorksheet.ClearRowHeight 和 ClearColWidth 可移除单个显式尺寸覆盖,而不影响其他行或列元数据ClearColWidth
更改
- 编译后的报表目标现在会先完成表达式求值再调用动态格式化,并通过单一回滚边界提交单元格内容、数字格式、行高和列宽
- 可恢复的单元格诊断会基于单元格现有字体派生红色字体和黄色填充样式,保留单元格其余样式,并在基础字体相同、运行器多次执行的情况下复用池化样式
修复
- 可恢复的求值失败不再遗留动态数字格式或显式的行、列尺寸,诊断写入现在也会在存储字面文本之前清除任何公式
版本 2.361.68
新增
- 编译后的报表运行器和生成器暴露 ErrorMode 、 StrictDataAccess 以及带有终态、已应用计数、失败详情和有序运行期问题的不可变 LastResult
ErrorModeStrictDataAccessLastResult WriteAndContinueWriteAndContinue 可将显式标记为可恢复的单元格数据失败替换为字面诊断并以 CompletedWithErrors 结束,而默认的 Stop 模式保持兼容不变CompletedWithErrorsStop
更改
- 在没有显式模板回退的情况下,严格数据访问会通过稳定的错误代码报告缺失的表、不可用的随机访问、缺失的行和缺失的字段
- 只有显式标记为可恢复的数据失败才能继续;结构性、回调、取消、资源、安全性、序列化以及其他致命失败仍会中止报表
修复
- 文件和加密文件输出失败现在会发布失败的运行结果,而不再沿用前一工作簿生成阶段遗留的已完成结果
版本 2.361.67
更改
- 编译后的模板、运行器、区域报表带和 Excel 表报表带现在通过每次逻辑运行一个的隔离数据会话来解析 dbvalue 和 dbcount
dbvaluedbcount - 同一运行内重复的别名只加载一次,后续运行会重新加载提供程序数据,并发运行各自维护独立缓存,而 PreprocessAndRun 的两次处理则共享一个一致的表快照
PreprocessAndRun - 报表带表达式只绑定自身的行或列变量,因此字面表名和内置位置变量不再被误认为是源数据列
修复
- 报表数据会话及其提供程序快照会在成功、取消或失败的执行之后释放,包括提供程序异常和可复用运行器重试的情形
版本 2.361.66
新增
TXLSReportDataContext.BeginRunTXLSReportDataContext.BeginRun 返回一个隔离的 IXLSReportDataSession 快照,支持状态检查以及已解析或已缓存别名的计数IXLSReportDataSession
更改
- 报表数据会话使用不区分大小写的哈希缓存来存放显式表、惰性提供程序结果、缺失别名和提供程序数据错误
- 每个不同的别名在每个会话中至多到达提供程序链一次,提供程序结果始终绑定到所请求的别名,同名别名的递归则立即失败
- 直接调用 TXLSReportDataContext.TryGetTable 和 RequireTable 时仍保留一个独立的兼容性缓存,并在注册发生变化时失效
TXLSReportDataContext.TryGetTableRequireTable
版本 2.361.65
新增
IXLSXImageBlobIXLSXImageBlob 和 TXLSXImageBlob 提供不可变的位图与 SVG 负载,带一次性 SHA-256 摘要、字节大小和可选的缓存键TXLSXImageBlobTXLSReportImageResult.CacheKeyTXLSReportImageResult.CacheKey 让 V2 图像提供程序能够显式标识可复用的内容,而同一键出现冲突内容时会在变更工作表之前被拒绝
更改
- 重复的报表图像通过显式缓存键或精确摘要匹配共享同一个不可变负载,同时保留各自独立的锚点和变换
- XLSX 和 ODS 保存时对每个不同的图像负载只写一次,跨工作表复用其媒体关系,并在工作簿重新打开时恢复共享负载
- XLSX 重新打开时现在会从 DrawingML 扩展关系恢复 SVG 伴随数据,并将其与位图回退配对
版本 2.361.64
新增
TXLSReportImageResultTXLSReportImageResult 可声明源像素尺寸和 DPI,图像请求与结果则以 EMU 为单位暴露相对锚点的目标偏移TXLSXImage.OffsetXEMUTXLSXImage.OffsetXEMU 和 OffsetYEMU 让图片在锚点内的位置在 XLSX 与 ODS 的保存/打开周期中保持不变OffsetYEMU
更改
- V2 图像绑定从 PNG、JPEG、GIF、BMP、EMF 和 WMF 文件头推导物理几何,应用 Natural、Contain、Cover 或 Stretch 尺寸模式,并在不解码像素的情况下将包含模式的图像居中
- 当文件头被截断、声明的尺寸相互矛盾、任一边超过 100,000 像素或解码后的总尺寸超过 1 亿像素时,位图几何会在变更工作表之前被拒绝
版本 2.361.63
新增
IXLSReportImageDataProviderV2IXLSReportImageDataProviderV2 可返回图像字节或由调用方借用、由提供程序移交的流,并附带工作簿、工作表、目标、报表带、表、行、锚点和取消上下文OnTransformImageOnTransformImage 可在绑定之前替换或调整图像大小,编译后的区域报表带和 Excel 表报表带则暴露每条实际数据行的只读快照
更改
- V2 图像流以有界块方式读取,默认限制为可配置的 64 MiB;借用的可定位流会恢复其位置,移交的流则恰好释放一次
- V2 负载会在变更工作表之前拒绝空数据、不匹配的格式签名、不一致的尺寸、无效锚点和超出网格的偏移
- 编译后的区域报表带和 Excel 表报表带在每生成一行时从已物化的绑定列为图像目标绑定一次,无需扫描生成的工作表单元格
版本 2.361.62
新增
TXLSCompiledReportRunnerTXLSCompiledReportRunner 和 TXLSReportGenerator 现在接受现有的 IXLSReportImageProvider ,并支持缺失图像和指令单元格策略TXLSReportGeneratorIXLSReportImageProviderTXLSReportImageBinder.ApplyTargetTXLSReportImageBinder.ApplyTarget 绑定单个预编译图像指令,而无需扫描无关的工作表单元格
更改
- 精确匹配的 {{#image Key}} 单元格会编译为类型化的报表目标,在未配置提供程序时保持不变,并在多个运行器会话之间复用其编译后的键和坐标
{{#image Key}}
版本 2.361.61
新增
TXLSCompiledReportRunnerTXLSCompiledReportRunner 现在暴露成对的工作簿与工作表生成事件,包含稳定的工作表标识、原始与当前坐标、只读报表数据、目标数量、取消状态和失败详情TXLSReportGeneratorTXLSReportGenerator 通过模板读取与生成生命周期事件来运行工作簿、文件、流或加密文件模板,并可选择就地修改或原子克隆修改
更改
- 报表生成会冻结初始工作表集合,在回调驱动的结构变化后重新编译,拒绝对同一工作簿的并发修改,在取消和失败时仍成对发出已进入的事件,并保留第一个异常
- 报表流始终归调用方所有,可定位的模板流会恢复其位置,仅向前的流以有界块方式消费,而流、文件和加密文件目标仅在成功完成后才会被改写
- 未挂接生命周期处理器的编译报表仍保留直接目标循环,不进行工作表扫描,也没有事件上下文和每目标生命周期分配
版本 2.361.60
新增
- XLSX 工作簿现在暴露 HasWebAddinTaskPanes 、 WebAddinTaskPaneCount 和 RemoveWebAddinTaskPanes ,用于精确检查和移除包根目录下的任务窗格
HasWebAddinTaskPanesWebAddinTaskPaneCountRemoveWebAddinTaskPanes
更改
- 移除 Web 加载项任务窗格时,现在会在变更前验证一个有界的内部关系图,保留共享及无关的包部件,移除专属后代和自有的关系部件,重建内容类型,防止其随源副本复活,并且整个过程幂等
- 经典 XLS 和 ODS 工作簿在不扫描包内容的情况下将 Web 加载项任务窗格的移除报告为不受支持
版本 2.361.59
新增
- 经典 XLS 和 XLSX 工作簿现在暴露对应的 SaveExternalLinkValues 和 UpdateLinks 属性,分别控制缓存的持久化和文件声明的链接更新偏好
SaveExternalLinkValuesUpdateLinks
更改
- 禁用外部链接缓存值时,现在只会省略经典的 XCT / CRN 记录或 XLSX 的 sheetDataSet 内容,同时保留链接定义、定义名称、关系、未知 XML 和内存中的缓存
XCTCRNsheetDataSet - 外部链接策略现在可在编辑之前无损往返保留的源值,可在 XLS 与 XLSX 之间转换,保留未变化的压缩包部件,并且绝不会发起外部文件或网络访问
版本 2.361.58
新增
TXLSHTMLExportTXLSHTMLExport 和 TXLSXHtmlExportSession 现在暴露当前 HTML 操作所使用的不可变 RenderGeometry 快照TXLSXHtmlExportSessionRenderGeometry
更改
- 经典 XLS 和 XLSX HTML 导出器现在通过后端特定的最大数字宽度几何将 Excel 字符宽度转换为固定的 CSS 长度,而不再使用硬编码的转换系数或 CSS 字符单位
- 工作簿、工作表、区域和增量多工作表 HTML 导出会捕获一次操作本地的校准,并配合有界的度量缓存,且绝不修改已存储的行高或列宽
版本 2.361.57
更改
- PDF、SVG、位图、打印预览和工作簿查看器操作现在会各自捕获独立的不可变渲染几何快照,并带有感知后端的有界度量缓存
- 共享页面渲染和 SVG 换行现在使用操作本地的字体测量,取代进程全局的 GDI 位图与字符串列表状态,同时保留已存储的行高和列宽
版本 2.361.56
更改
- 经典 XLS 和 XLSX 的自动调整现在会为每次操作捕获一个不可变的工作簿渲染几何服务,涵盖经过校准的文本测量、换行、行距、单元格边距以及 XLSX 实际可见字体
- 分页现在会为每次构建捕获工作簿本地几何,移除进程全局的常规字体和最大数字宽度状态,并应用经过校准的隐式列宽,而不修改已存储的行高或列宽
版本 2.361.55
新增
- 经典 XLS 和 XLSX 工作簿现在会创建不可变的、归操作所有的几何与字体测量服务,带有有界的本地缓存和共享的宽度转换,并且自动调整不再使用进程全局的 DPI 或基准宽度缓存
版本 2.361.54
新增
- 经典 XLS 和 XLSX 工作簿现在暴露经过验证的 TXLSRenderCalibration 值,以及独立的 CaptureRenderCalibration 快照和 ResetRenderCalibration 默认值,供后续渲染操作使用
TXLSRenderCalibrationCaptureRenderCalibrationResetRenderCalibration
版本 2.361.53
新增
- 当工作表的打印机设置关系缺失、类型错误或悬空时,XLSX 加载现在会报告 xlsDiagnosticPrinterSettingsRelationshipInvalid
xlsDiagnosticPrinterSettingsRelationshipInvalid
更改
SaveXLSWorkbookAsXLSXSaveXLSWorkbookAsXLSX 和 SaveXLSXWorkbookAsXLS 现在独立携带类型化的页面设置字段和不透明的打印机驱动字节,标准字段优先于重复的私有默认值SaveXLSXWorkbookAsXLS
修复
- 当 pageSetup 所命名的关系无效时,XLSX 加载不再绑定无关的打印机设置部件
pageSetup - XLSX 到 BIFF8 的转换现在会在写入任何目标字节之前拒绝过大或无法表示的打印机设置
版本 2.361.52
新增
- 经典 XLS 和 XLSX 工作表现在暴露复制隔离的 PrinterDriverData 和 HasPrinterDriverData 属性,以及 ClearPrinterDriverData ,可直接控制不透明的打印机驱动负载
PrinterDriverDataHasPrinterDriverDataClearPrinterDriverData
修复
- 清除 XLSX 打印机驱动数据时,现在即使启用了不受支持部件的保留功能,也会移除其工作表关系和二进制包部件
版本 2.361.51
更改
- XLSX 加载和保存现在通过 pageSetup 关系、内容类型声明和 printerSettingsN.bin 包部件保留每个工作表的二进制打印机设置
pageSetupprinterSettingsN.bin - 打印机设置在同工作簿和跨工作簿的工作表复制后依然保留,并具有字节一致且独立的归属,未变化的源部件则可保留其原始压缩负载
版本 2.361.50
更改
- 经典 XLS 加载和保存现在会保留完整的 BIFF PLS 打印机驱动负载,以及紧随其后的每个 Continue 段
PLSContinue - 打印机驱动负载会随工作表深拷贝,在 Setup 之前按精确的 BIFF 大小块输出,并在结构不完整或超过 1 MiB 安全上限时被拒绝
Setup
版本 2.361.49
新增
- 经典 XLS 页面设置现在暴露只读的 HasSetupRecord 和 PrinterSettingsInitialized 属性,让调用方能够区分缺失或未初始化的打印机设置与已定义的值
HasSetupRecordPrinterSettingsInitialized
更改
- 保存未改动过的经典工作表时,现在会保留缺失的 BIFF Setup 记录,并完整保留现有 34 字节记录的每一个字节,包括保留位和未建模的标志位
Setup - 页面设置 setter 现在只在需要时才创建缺失的 Setup 记录,并根据受影响的属性初始化依赖打印机或方向的字段
Setup
版本 2.361.48
新增
SaveXLSXWorkbookAsXLSSaveXLSXWorkbookAsXLS 现在可通过文件和流重载将 XLSX 模型的工作簿转换为 BIFF8,保留已加载的值、公式、核心样式、合并区域、行与列尺寸、工作簿日期模式以及活动工作表状态
更改
- XLSX 到 XLS 的转换会在写入样式之前构建一个确定性的 56 色调色板,保留已被占用的索引槽位,并在直接颜色超出 BIFF8 容量时应用加权 OKLab 量化
- 该转换路径遍历已加载的稀疏或打包单元格而无需物化源网格,在触及目标之前拒绝超出 BIFF8 限制的坐标,并且现已在 Delphi 和 C++Builder 的 ConversionWorkbench 示例中提供
版本 2.361.47
新增
- 经典 XLS 和 XLSX 工作簿现在暴露对应的 ApplyBiffPalettePlan 方法,可验证并原子地应用当前的 56 槽位调色板方案
ApplyBiffPalettePlan - 经典工作簿现在暴露 BiffPaletteSavePolicy ,提供显式的 BIFF8 优化选项,其默认值保持历史调色板输出不变
BiffPaletteSavePolicy
更改
- 调色板方案的应用现在会在首次修改之前校验源生成计数、源哈希、所有槽位标识与颜色、聚合计数、保留锁、变更标志和不透明目标,然后仅重建一次缓存的 OKLab 匹配器
- 优化的 BIFF8 保存在成功后将已应用的调色板留在工作簿中,而一旦输出失败或被取消,则会恢复全部 56 个源颜色和原始生成计数;BIFF5 和非 BIFF 输出路径保持不变
版本 2.361.46
新增
- 经典 XLS 和 XLSX 工作簿现在暴露对应的 BuildBiffPalettePlan 方法,返回不产生修改的 56 槽位方案,其中包含源调色板标识、锁定槽位、建议颜色、聚合的真彩色映射、精确覆盖情况和感知误差统计
BuildBiffPalettePlan
更改
- BIFF 调色板规划现在会先保留索引颜色使用者和既有的精确颜色,再分配空闲槽位,只有当直接颜色和解析后的主题颜色超出剩余容量时才采用确定性的按频率加权 OKLab 聚类
- 调色板方案的构建只读取已存储的样式和条件格式元数据,不更改调色板条目、自定义颜色计数、单元格、保存行为或稀疏存储
版本 2.361.45
新增
- 经典 XLS 和 XLSX 工作簿现在暴露对应的 ScanIndexedColorUsage 方法,返回确定性的 56 槽位清单,包含公共索引与物理索引、规范化的 ARGB 值、定义与引用计数、使用者类别以及保留锁
ScanIndexedColorUsage
更改
- 索引颜色使用情况扫描现在覆盖工作簿样式池、稀疏单元格引用、命名样式、区域覆盖、工作表网格线、形状、批注、富文本、图表字体、差异样式、数据条和色阶,且不物化未使用的单元格,也不更改工作簿状态
- 索引形式的条件格式颜色现在可以在经典 BIFF 与 OpenXML 的差异样式、数据条和色阶之间往返,包括在流式保存时先于工作表部件写出差异样式标识符
版本 2.361.44
新增
- 经典 XLS 和 XLSX 工作簿现在暴露对应的 NearestIndexedColor 方法,返回最接近的公共调色板索引、物理槽位、规范化的 ARGB 值、感知距离平方以及精确匹配状态
NearestIndexedColor
更改
- 最近索引颜色匹配现在在两个工作簿引擎和旧式颜色管理器之间共享同一个缓存的 OKLab 实现,采用确定性的最低索引平局裁决,且缓存更新仅限于实际发生的调色板修改
- 最近颜色查询只扫描 BIFF 调色板的 56 个物理条目,拒绝部分透明的输入,并且从不修改调色板或工作簿状态
版本 2.361.43
新增
- 经典 XLS 和 XLSX 工作簿现在暴露对应的 ResolveIndexedColor 重载,可对公共颜色索引、BIFF icv 值和 OOXML 索引颜色进行分类,并返回调色板、自动、系统或无效等元数据
ResolveIndexedColoricv - 类型化的索引颜色结果会报告原始索引、调色板槽位、系统颜色角色、规范化的 ARGB 值,以及是否解析出了具体颜色
更改
- 自动和系统颜色标记不再隐式查询当前 Windows 桌面;当需要具体的环境颜色时,调用方可提供显式的解析器
- 主题系统颜色现在使用其存储的回退 RGB 值,让加载、保存和无界面处理在不同机器之间保持确定性
修复
- 无效的 OOXML 索引颜色值不再解析为不透明黑色,旧式颜色管理器的默认值现在使用精确的 128 通道调色板值
版本 2.361.42
新增
TXLSWorksheetTXLSWorksheet 和 TXLSXWorksheet 现在暴露对应的 TryGetOutlineNode 、 SetOutlineNodeCollapsed 和 SetOutlineDisplayLevel 方法,用于从 1 开始编号的行或列汇总节点TXLSXWorksheetTryGetOutlineNodeSetOutlineNodeCollapsedSetOutlineDisplayLevel
更改
- 工作表分级显示的查询与更新现在会将稀疏的引擎元数据适配为压缩方案,默认保留嵌套子级状态,并应用隐藏和折叠变更而不扫描未使用的工作表坐标
- OpenDocument 的行和列分组现在可在直接元数据修改、结构性编辑、ODS 往返以及转换为 XLSX 汇总节点标记时保留原生的嵌套显示状态
TXLSXWorksheet.ToggleRowGroupedTXLSXWorksheet.ToggleRowGrouped 和 ToggleColGrouped 仍可作为感知方向的兼容包装保留在汇总节点 API 之上ToggleColGrouped
版本 2.361.41
新增
TXLSOutlineGeometryTXLSOutlineGeometry 现在可构建压缩的 TXLSOutlineMutationPlan 实例,用于幂等的节点折叠或展开,以及从 1 开始编号的分级显示级别变更TXLSOutlineMutationPlan- 分级显示修改方案暴露显式的保留、折叠和展开子级模式,同时默认让嵌套的折叠标记保持独立
更改
- 展开嵌套的分级显示节点时,现在会在推导可见性时考虑已折叠的祖先和已折叠的后代,而批量节点发现则以线性单调栈遍历仅访问已物化的区段
版本 2.361.40
新增
- 新的引擎中立单元 lxOutline 可根据已排序的稀疏区段构建行或列的分级显示几何,并发现汇总在前或汇总在后的节点、嵌套明细范围、汇总级别、隐藏状态和显式折叠标记,而无需扫描未使用的工作表坐标
lxOutline
版本 2.361.39
新增
- 经典 XLS 列元数据现在通过 TXLSColumnInfo.Collapsed 和 TXLSColumnInfoList.Collapsed 暴露独立的分级显示折叠标记
TXLSColumnInfo.CollapsedTXLSColumnInfoList.Collapsed
修复
- 经典 XLS 的列分级显示折叠标记现在可在 BIFF 往返、列格式复制、工作表复制和相邻记录合并中保留,同时已定义宽度、最适合和音译标志保持不变
版本 2.361.38
修复
- 经典 XLS 的分级显示汇总列现在能在从左到右和从右到左的工作表视图之间保持其逻辑上的左或右位置,而不再写入相反的 WSBOOL 方向位
WSBOOL
版本 2.361.37
新增
- 经典 XLS 和 XLSX 工作表现在暴露 EvaluateFormulaAt ,可在显式的目标单元格上下文中进行只读的 A1 或 R1C1 公式求值
EvaluateFormulaAt IXLSFormulaEvaluationTemplateIXLSFormulaEvaluationTemplate 只编译一次不可变的公式锚点,即可通过 EvaluateAt 或 EvaluateAtWithOptions 在其他单元格上反复求值EvaluateAtEvaluateAtWithOptions- 公式求值选项现在包含公式长度、语法项步数、递归深度和生成数组字节数的限制,超限时将以 xlfeResourceLimit 报告
xlfeResourceLimit
更改
- 一次性求值与可复用求值现在共享工作表本地的名称、结构化引用、未缓存的公式依赖、数组根、易失性状态、取消以及显式授权的外部引用,且不写入工作簿状态
- 现有的工作簿和工作表 Calculate 方法仍作为类型化上下文求值器之上的兼容外观
Calculate
修复
- 上下文求值现在会保留公式错误的变体,并区分解析失败、不支持的函数、循环引用、外部引用、取消、工作表生命周期以及资源限制等各类失败
- 可复用的 R1C1 模板在另一个目标单元格上求值时,现在会相对其编译锚点平移行与列的相对偏移
版本 2.361.36
新增
ConvertExternalDefinedNamesToRefErrorsConvertExternalDefinedNamesToRefErrors 现可在经典 XLS 和 XLSX 工作簿上使用,用于解除已确认的外部工作簿定义名称的关联,而不改写普通单元格公式- 被跳过的畸形或不支持的定义会通过 xlsDiagnosticDefinedNameConversionSkipped 报告
xlsDiagnosticDefinedNameConversionSkipped
更改
- 该转换以原生的 #REF! 原子替换所选定义,同时保留工作簿或工作表作用域、可见性、注释、宏与内置标志、未知属性以及外部链接部件
#REF!
修复
- =[1]!RemoteName 之类的外部定义名称槽位语法现在会通过声明的工作簿链接解析,依赖公式在重新计算期间会保留所产生的 Excel 错误值
=[1]!RemoteName
版本 2.361.35
新增
TXLSWorkbookWorkspace.RecalculateTXLSWorkbookWorkspace.Recalculate 现在通过一次跨工作簿的拓扑遍历求值已注册的经典 XLS、XLSX 和 ODS 公式节点,包含强连通分量检测和脏生成传播TXLSWorkspaceRecalcResultTXLSWorkspaceRecalcResult 会报告图的复用情况、脏节点与已求值节点、循环、受阻的依赖项、失效情况,以及运行期缓存的命中与未命中
更改
- 工作区会保留其依赖关系图,直到注册或公式拓扑发生变化;普通的值编辑只会将受影响的工作簿节点及其传递依赖标记为脏
- 同一次计算过程中的重复外部单元格读取会共享一个精确到工作簿、工作表、行和列的缓存,该缓存会在每次排定的公式更新之前失效
修复
- 工作簿之间的双向链接不再被视为循环,除非公式单元格图中存在真正的环;环成员及其受阻的依赖项会被失效处理,而不是返回过期的缓存值
- 失败或因环而失效的工作区会话现在会保留引擎本地的脏状态,让后续的工作簿重算能重试未完成的公式,而不是把一次不完整的遍历当作已完成
版本 2.361.34
新增
TXLSWorkbookWorkspace.BuildDependencyGraphTXLSWorkbookWorkspace.BuildDependencyGraph 现在会在已注册的经典 XLS、XLSX 和 ODS 工作簿之间创建一个依赖关系图,保留工作簿、工作表、单元格、矩形区域以及带作用域定义名称的标识TXLSWorkspaceDepGraphTXLSWorkspaceDepGraph 暴露公式节点、引用、边、单元格依赖和定义名称依赖等查询,以及用于性能验证的候选检查诊断
更改
- 大型公式区域仍保持为紧凑区间而不展开为单个单元格,行区间树则同时剪枝依赖查找和边构建,无需物化打包的工作表值
- 本地定义名称同时保留其符号依赖和静态解析出的单元格或区域依赖,外部定义名称则保留其声明的外部工作簿槽位、名称和工作表作用域
修复
- 公式解析器检查可选的外部工作簿前缀时,不再清除普通定义名称
版本 2.361.33
新增
TXLSWorkbookWorkspace.OnLoadWorkbookTXLSWorkbookWorkspace.OnLoadWorkbook 现在可通过调用方控制的策略请求外部工作簿,每个规范化标识至多请求一次,而 ResolveWithLoader 会报告类型化的未找到、错误、循环和资源限制诊断ResolveWithLoaderMaxLoadDepthMaxLoadDepth 、 MaxWorkbookCount 和 ResetLoadAttempts 为外部工作簿加载提供显式的上限和重试控制MaxWorkbookCountResetLoadAttempts
更改
- 并发的外部工作簿请求现在会共享同一个进行中的加载结果,嵌套重入会被直接拒绝而无需在跨线程加载循环中等待;默认工作区仍不执行任何文件系统或网络访问
版本 2.361.32
新增
- 经典 XLS 工作簿现在暴露 CreateWorkspaceWorkbook 、 RegisterExternalWorkbook 、 UnregisterExternalWorkbook 和 ExternalWorkspace ,让经典、XLSX 和 ODS 工作簿能够通过一个引擎中立的工作区提供外部公式值
CreateWorkspaceWorkbookRegisterExternalWorkbookUnregisterExternalWorkbookExternalWorkspace - 经典 XLS 外部链接缓存现在可将类型化 XCT 和 CRN 记录中的数字、字符串、布尔、错误和空白值解码为稀疏的常数时间查找,而无需物化工作表
更改
- 外部公式求值现在会先解析工作表名称再回退到按位置解析,并且始终先读取显式注册的活动工作簿,再读取类型化的文件缓存,最后返回 #REF! ;已销毁的注册会被撤销,且不会隐式访问文件或网络
#REF! - 带引号的外部工作簿标识可以包含 URI 方案、Windows 盘符和其他冒号,而不会被误认为三维工作表区域分隔符,因此 ODF 外部源的 IRI 在公式导入期间保持原样
版本 2.361.31
新增
TXLSWorkbookWorkspaceTXLSWorkbookWorkspace 、 IXLSWorkspaceWorkbook 和 TXLSXWorkbook.CreateWorkspaceWorkbook 提供线程安全的外部工作簿标识与注册基础,具备显式的解析状态、生成跟踪和可撤销的工作簿适配器IXLSWorkspaceWorkbookTXLSXWorkbook.CreateWorkspaceWorkbook
更改
TXLSXWorkbook.RegisterExternalWorkbookTXLSXWorkbook.RegisterExternalWorkbook 现在会保留路径和扩展名,相对拥有它的工作簿解析关系目标,拒绝有歧义的别名或同名基名的目标而不是默默择一,在目标工作簿销毁时撤销注册,并保留类型化的外部链接缓存回退,且不进行隐式文件或网络访问
版本 2.361.30
新增
- 经典和 XLSX 的只读工作簿视图现在可以通过 xlsvEvaluateFormulas 按需求值公式,并通过 FormulaEvaluation 报告独立的结果,而不会替换已存储的公式缓存
xlsvEvaluateFormulasFormulaEvaluation
更改
- 并发的只读视图现在会隔离公式递归标志、标量结果、已编译的 XLSX 公式和数组矩阵,XLSX 外部公式只使用文件本地的外部链接缓存,绝不解引用活动工作簿注册
修复
- XLSX 外部链接缓存值现在会将外部 XTI 记录携带的从 1 开始的工作表索引解析为正确的从 0 开始的缓存工作表条目
版本 2.361.29
新增
- XLSX 工作簿现在暴露 IXLSXWorkbookOwner.CreateReadOnlyView ,提供视图本地的活动工作表、按值复制的已物化和打包单元格快照、缓存的公式结果、可选的公式文本、安全的所有者/视图释放顺序以及快速失败的写入排除
IXLSXWorkbookOwner.CreateReadOnlyView
更改
- XLSX 只读视图只使用本地存储的外部公式缓存,绝不解引用弱的活动工作簿注册
版本 2.361.28
新增
- 经典工作簿现在暴露 CreateReadOnlyView 和 IXLSReadOnlyWorkbookView ,提供常数时间的共享模型视图,具有独立的活动工作表、按值复制的单元格快照、缓存的公式结果、可选的公式文本、引用计数管理的所有者生命周期以及快速失败的写入排除
CreateReadOnlyViewIXLSReadOnlyWorkbookView
版本 2.361.27
新增
- 经典、XLSX 和 ODS 工作簿现在暴露 CreateFormulaCacheReader 和共享的 IXLSFormulaCacheReader 接口,用于引擎中立的公式缓存检查,并提供安全的生命周期失效机制
CreateFormulaCacheReaderIXLSFormulaCacheReader
更改
- 共享公式缓存检查现在会保留每个成员各自独立存储的结果,因此没有缓存值的从属成员会报告缺失,而不是继承根成员的值
版本 2.361.26
新增
TXLSXWorkbook.TryGetCachedFormulaValueTXLSXWorkbook.TryGetCachedFormulaValue 现在可报告 XLSX 和 ODS 公式缓存的存在性、来源和值类型,无需计算,也不修改工作簿
修复
- XLSX 和 ODS 公式缓存现在能在保存和重新打开时保留缺失与显式空白结果、空字符串、布尔 false、数值零、类型化错误和显式日期,而已更改的公式不再序列化过期的缓存结果
版本 2.361.25
新增
- 经典工作簿现在暴露 TryGetCachedFormulaValue ,带显式的缓存存在性、来源和值类型,无需计算、用户函数回调、令牌反编译或修改工作簿即可读取已存储的公式结果
TryGetCachedFormulaValue
修复
- 经典 XLS 公式的布尔和错误缓存现在在普通公式和共享公式中都使用指定的 BIFF 负载字节,加载的错误结果在保存和重新打开后仍保持为类型化的 varError 值
varError
版本 2.361.24
新增
- 经典和 XLSX 工作簿现在提供 CreateLoadedCellCursor(Boolean) 重载,可将独立设置样式的已存储空白单元格作为 xlckBlank 快照包含进来
CreateLoadedCellCursor(Boolean)xlckBlank
更改
- 可选的空白遍历会保持工作表、行和列的顺序,让打包的 XLSX 存储保持压缩,并排除继承格式的坐标以及无样式的 Empty 和 Null 占位
版本 2.361.23
新增
- XLSX 工作簿现在暴露 TXLSXWorkbook.CreateLoadedCellCursor ,用于以恒定状态按行主序遍历各工作表中已存储的值单元格和公式单元格
TXLSXWorkbook.CreateLoadedCellCursor TXLSLoadedCellKindTXLSLoadedCellKind 现在包含 xlckError ,让已存储的 XLSX 错误值保留其独特的值类型xlckError
更改
- XLSX 游标直接遍历已物化的稀疏行块或打包存储,不对单元格排序,也不物化打包值;公式快照返回当前存储的缓存值而不重新计算
- 工作簿范围的结构变化和工作簿释放会通过共享的生命周期租约使 XLSX 游标失效,而对现有单元格内容的编辑则保持遍历有效,且已捕获的快照归调用方所有
版本 2.361.22
新增
- 经典工作簿现在暴露 IXLSWorkbook.CreateLoadedCellCursor ,用于以恒定状态按行主序遍历各工作表中已存储的值单元格和公式单元格
IXLSWorkbook.CreateLoadedCellCursor TXLSLoadedCellSnapshotTXLSLoadedCellSnapshot 返回独占的工作表标识、从 1 开始的坐标、样式、值类型、值和公式文本,而不暴露内部单元格对象
更改
- 已加载单元格游标在单元格拓扑、工作表集合或工作簿模型被替换后立即快速失败,而对现有单元格内容的编辑则保持遍历有效,且先前捕获的快照保持不变
版本 2.361.21
新增
- 经典和 XLSX 的工作表单元格存储与工作表集合现在暴露独立的结构生成计数器,用于安全的长时遍历
XlsValidateStructureGenerationXlsValidateStructureGeneration 和 EXLSLoadedCellCursorInvalidated 为已加载单元格读取器提供统一的快速失败验证约定EXLSLoadedCellCursorInvalidated
更改
- 单元格的创建、移除、清除、坐标重排、打包存储切换、索引重建以及工作表的添加、删除或移动操作都会推进相应的生成计数,而对现有单元格内容的编辑、工作表重命名或激活以及无实际效果的修改则保持其稳定
版本 2.361.20
新增
TXLSForwardReaderTXLSForwardReader 现在通过与 XLS、XLSX、CSV 和 TSV 相同的回调接口接受 ODS 输入PeakRowBufferedBytesPeakRowBufferedBytes 和 SheetPassesStarted 暴露共享行后端的峰值逻辑行工作集和成功的工作表遍历次数SheetPassesStarted
更改
TXLSForwardReaderTXLSForwardReader 现在对每种受支持的格式都适配 TXLSRowCursor ,共享行边界、列投影、公式状态、富文本、密码、跳过记录和流位置行为,而不再维护各自独立的扫描路径TXLSRowCursor- 前向读取器的工作表索引统一从 1 开始,被 OnSheet 跳过的工作表不会被打开或解压
OnSheet
版本 2.361.19
新增
TXLSRowCursorTXLSRowCursor 现在暴露显式的已关闭、首行之前、活动、EOF、已取消和已出错状态,以及一个幂等的 Cancel 方法,可在不关闭源的情况下释放活动工作表流CancelCurrentRowViewCurrentRowView 提供经过生成检查的当前行借用视图,不复制其单元格数组;前进、选择工作表、取消、关闭或销毁游标都会使先前的视图失效并抛出 EXLSRowCursorViewInvalidatedEXLSRowCursorViewInvalidated- 流打开现在接受 xsoBorrowed 或 xsoOwned ,仅在成功打开后才转移所有权,而 PeakRowBufferedBytes 报告自上次打开以来的估计峰值逻辑行缓冲
xsoBorrowedxsoOwnedPeakRowBufferedBytes
更改
- 工作表部件和处理启动失败现在会保留原始的读取异常并将游标置于出错状态,而不是表现为取消或正常的 EOF;显式选择工作表会重置该处理以便重试
版本 2.361.18
新增
TXLSDirectCellTXLSDirectCell 和 TXLSRowCursorCell 现在暴露 HasFormula 和 FormulaTextAvailable ,可区分纯值、文本可用的公式以及文本被抑制或不可用的公式TXLSRowCursorCellHasFormulaFormulaTextAvailableTXLSDirectReaderTXLSDirectReader 、 TXLSForwardReader 和 TXLSRowCursor 现在提供 IncludeFormulaText ;禁用它可保留缓存值、坐标、样式和公式存在性,同时避免在 XLSX 和 ODS 流中累积公式文本TXLSForwardReaderTXLSRowCursorIncludeFormulaText
更改
- 行边界和列投影现在会在分配值、公式和富文本之前推入 XLS、XLSX、ODS、CSV 和 TSV 后端;ODS 的重复列跨可直接在所选列之间跳跃,重复的行块则被裁剪到所请求的范围
- 行游标的处理选项在某个工作表处理进行期间被冻结,在 EOF、选择工作表或关闭后重新可变,避免一次处理混用不兼容的过滤或解码设置
版本 2.361.17
新增
TXLSRowCursorTXLSRowCursor 现在可打开 ODS 文件和调用方拥有的流,通过 mimetype 或 content.xml 自动检测 ODS 包,预加载工作表名称,并通过 FindFirst 和 FindNext 流式读取所选表格,而无需物化工作簿content.xmlFindFirstFindNext
更改
- ODS 行遍历会惰性展开重复的行和列,不将被覆盖的单元格当作独立值输出,保留带样式的空白和缓存的公式值,恢复借用的流位置,并通过 OnSkippedRecord 报告无效或受网格限制的重复计数
OnSkippedRecord
版本 2.361.16
新增
TXLSRowCursorTXLSRowCursor 现在可流式读取 CSV 和 TSV 文件或调用方拥有的流,支持 UTF-8 与 UTF-16 BOM 检测、多行带引号记录、转义引号、逗号/分号/制表符/竖线分隔符探测、可选的分隔符覆盖,以及可选的数字、ISO 日期、布尔和错误类型识别
更改
TXLSForwardReaderTXLSForwardReader 和 TXLSRowCursor 现在共享同一个可暂停的文本行后端,保持回调与拉取结果一致,并在前进之前释放上一行的 Variant、公式和富文本负载TXLSRowCursor
版本 2.361.15
新增
TXLSRowCursorTXLSRowCursor 现在可从文件或流打开经典 .xls 工作簿,自动检测 BIFF 复合容器,返回缓存的数字或字符串公式结果以及已存储的 Blank 和 MulBlank 单元格,同时只保留当前逻辑行.xlsBlankMulBlank
更改
- 行游标的 Open 重载接受可选的 TXLSForwardFormat ;文件打开拥有其内部 BIFF 流,流打开借用调用方的流并在 Close 时恢复其初始位置,重复的 FindFirst 处理则直接定位到所选工作表
OpenTXLSForwardFormatCloseFindFirst
版本 2.361.14
新增
- 公式计算现在支持对单个单元格、跨工作表引用和矩形区域使用 ISFORMULA ,对区域输入返回同形状的布尔数组,且不求值被引用的公式
ISFORMULA
更改
- 公式存在性检查会区分普通值和空白、共享公式成员、经典与 XLSX 数组公式成员、动态数组锚点以及动态溢出子项;生成的数组受 FormulaArrayMemoryLimit 约束
FormulaArrayMemoryLimit - XLSX 存储带 _xlfn. 前缀的 ISFORMULA ,ODS 输出标准的 OpenFormula 拼写,经典 XLS 保存则干净地拒绝这一不受支持的未来函数,而不提交不完整的流
ISFORMULA_xlfn
修复
- 公式文本解析现在能识别七种标准 Excel 错误字面量,让 #REF! 可以穿过仅接受引用的函数传播;解析为标量的定义名称则报告 #VALUE! 而不是 #NAME?
#REF!#VALUE!#NAME?
版本 2.361.13
新增
- 公式计算现在支持在整个 Unicode 标量范围内使用 UNICHAR ,包括增补字符和私用区字符,并对零、超范围值、代理码点和 Unicode 非字符给出与 Excel 一致的错误
UNICHAR - 公式计算现在支持 BAHTTEXT ,输出泰铢和萨当文本,采用保留两位小数、中点远离零的舍入方式,并支持负值、重复的百万组和有限精度的科学计数法输入
BAHTTEXT
更改
UNICHARUNICHAR 和 BAHTTEXT 会逐元素映射区域和生成的数组,同时保留局部错误;XLSX 存储带未来函数前缀的 UNICHAR ,而 BAHTTEXT 在 XLS 和 XLSX 中都保持为标准的裸函数BAHTTEXTUNICHARBAHTTEXT
版本 2.361.12
新增
- 公式计算现在支持 COMBINA 和 PERMUTATIONA (截断的非负参数、带检查的溢出、单元素数组广播和逐元素错误),并支持 MUNIT 生成无固定维度上限的单位矩阵
COMBINAPERMUTATIONAMUNIT - 经典和 XLSX 工作簿暴露 FormulaArrayMemoryLimit ,默认 64 MiB,用于限制生成的公式数组负载,包括并行的 XLSX 重算工作线程
FormulaArrayMemoryLimit
更改
PERMUTATIONAPERMUTATIONA 使用对数幂运算, COMBINA 缩短其乘法递推, MUNIT 分配紧凑的数值矩阵且只写其对角线COMBINAMUNIT
修复
- 数值公式数组不再被归类为标量数字,新建的经典工作簿在首次保存之前进行公式计算时也会应用 BIFF97 网格限制
版本 2.361.11
新增
- 公式计算现在支持 COT 、 ACOT 、 COTH 、 ACOTH 、 CSC 、 CSCH 、 SEC 和 SECH ,在标量和广播数组操作数上遵循主值、定义域、奇点、有限输入和大参数规则
COTACOTCOTHACOTHCSCCSCHSECSECH
修复
- 映射的公式函数现在会将直接的标量失败保留为电子表格错误值,对较大的有效输入使用抗取消的倒数和指数尾部分支,写入精确的不带 _xlws. 的 _xlfn. 名称,并干净地拒绝不受支持的经典 BIFF 公式
_xlfn._xlws
版本 2.361.10
新增
- 公式计算现在支持 CEILING.MATH 和 FLOOR.MATH ,支持省略 significance 和 mode 参数、与符号无关的 significance、精确的十进制倍数边界以及规定的负数 mode 方向
CEILING.MATHFLOOR.MATH
更改
- 公式级数组函数现在可以共享一个线性元素映射器,支持单行和单列广播、一次性区域快照以及逐元素的转换或计算错误;XLSX 对这两个新函数使用 _xlfn. 前缀,经典 BIFF 保存则干净地拒绝不受支持的公式
_xlfn
版本 2.361.9
新增
- 公式计算现在支持 SORTBY ,提供稳定的多键行或列排序、各自独立的升序或降序方向、省略方向时的默认值、区域或生成数组作为键,并先对源和键做一次性快照再进行 O(n log n) 排序
SORTBY
修复
- 当公式无法表示时,经典 BIFF 保存现在会干净地失败,而不是在内部未来函数标识符被拒绝后仍报告成功;XLSX 写入带 _xlfn. 的 SORTBY 且从不添加 _xlws.
SORTBY_xlfn._xlws
版本 2.361.8
更改
- 工作表零值显示模式现在在工作簿查看器、预览、打印、位图、EMF、SVG、PDF、经典 HTML 和 XLSX HTML 路径中使用统一的原始值判定;真实的数值零会在数字格式化和文本测量之前被隐藏,而公式显示模式仍保持优先
修复
- XLSX 工作表视图现在通过单一设置解析、写入和复制零值显示状态,正确处理 1904 日期基准,保留隐藏零值单元格的条件格式外观和超链接几何,且存储值、公开的格式化文本、CSV 和 ODS 输出均保持不变
版本 2.361.7
更改
- 工作表公式显示模式现在在工作簿查看器、预览、打印、位图、EMF、SVG、PDF、经典 HTML 和 XLSX HTML 路径中使用统一的、感知保护单元格的文本判定;公式文本在“常规”对齐下采用文本对齐并保留显式对齐,会获得两倍于原值的有效布局宽度(非持久化),同时不会溢出到相邻单元格
修复
- XLSX 工作表视图现在同时接受 showFormulas="1" 和 showFormulas="true" ,在同工作簿和跨工作簿的工作表复制期间保留该设置,并写出所需的 sheetView 状态,而不改变公式缓存、CSV 输出、ODS 持久化或公开的格式化值约定
showFormulas="1"showFormulas="true"sheetView
版本 2.361.6
更改
- XLSX 外部工作簿公式现在在 OnlyExternal 转换、公式诊断、计算绑定、跨工作簿复制和生成公式序列化之间共享一个感知语法的工作簿前缀词法分析器;数字链接槽位采用规范形式,而结构化引用、字符串字面量、畸形索引和有歧义的文件名前缀都会直接失败拒绝
OnlyExternal TXLSXExternalLinkTXLSXExternalLink 现在暴露其源 RelationshipId 、从 1 开始的 SourceSlot 和类型化的 LinkKind ,让工作簿、DDE、OLE 和未解析的外部引用条目可以被审计,而无需从集合顺序或目标文本推断其身份RelationshipIdSourceSlotLinkKind
修复
- 更改 XLSX 外部链接目标或工作表列表时,现在会按修订版本使已编译的外部公式绑定失效,而不再重新扫描每个单元格;没有关系文件的未变化 DDE 或 OLE 外部链接部件在保存期间仍按字节保留
版本 2.361.5
修复
- XLSX 外部工作簿公式槽位现在遵循 workbook.xml 外部引用的文档顺序,而不是关系文件顺序;缺失、未解析和类型错误的关系会保留空槽位,使后续的 [N] 引用不会错位
workbook.xml[N]
版本 2.361.4
更改
- 使用 OnlyExternal 的经典 XLS 公式冻结现在会对保留的 BIFF 引用进行分类,只转换已确认的外部工作簿公式,而内部、加载项、DDE/OLE 和畸形引用仍保持为公式
OnlyExternal
修复
- 以等号或单引号开头的公式结果在值转换期间现在保持为字面字符串,数组公式组会在任何根公式或溢出公式释放之前生成快照
版本 2.361.3
更改
- 经典 XLS 的辅助链接和外部工作表索引现在使用有界的类型化分类,涵盖自身、同表、加载项、外部工作簿、DDE/OLE、未使用和未知记录
修复
- 畸形的辅助链接负载按字节原样保留,而不会被重构为其他链接类型;被截断的外部工作表表也不再读取超出其记录数据的范围
版本 2.361.2
修复
- 经典 XLS 公式现在会将外部定义名称标记中从 0 开始的 XTI 索引解析为正确的内部外部工作表条目,包括第一个条目
版本 2.361.1
修复
- 直接 XLSX 写入器现在只在 ShowDropDown 被禁用时才写出基础的 SpreadsheetML showDropDown 抑制标志,保持公开的面向显示的 API 语义
showDropDownShowDropDown
版本 2.361.0
新增
- 图表系列新增 CategoriesMultiLevel :设置后可把分类输出为 multiLvlStrRef (层次式轴标签)而非平铺的字符串引用,并支持从已保存的图表往返恢复
CategoriesMultiLevelmultiLvlStrRef
版本 2.360.0
修复
- 经典 XLS 名称注释现在使用正确的 NAMECMT 记录标识符($0894);先前使用的标识符($0019)按 BIFF 规范属于 WINDOWPROTECT
NAMECMTWINDOWPROTECT
新增
WindowProtected经典工作簿的 WindowProtected 通过 WINDOWPROTECT 记录($0019)往返工作簿窗口保护标志;除非显式写入该属性,否则以捕获的原始记录体为准WINDOWPROTECT
版本 2.359.0
新增
- 图表数据表暴露独立的 showHorzBorder / showVertBorder / showOutline 开关,不再总是绘制所有边框
showHorzBordershowVertBordershowOutline - 折线图新增垂直线( HasDropLines ),堆积条形图新增系列线( HasSeriesLines ),两者均可往返;通过 LegendDeleted 可单独将系列从图例中移除,同时仍在图表中绘制
HasDropLinesHasSeriesLinesLegendDeleted
版本 2.358.0
新增
- 报表带新增固定与空数据集语义:当数据集为空时, EmptyBandPolicy 可保留、清空或删除模板行(不再遗留未解析的占位符); FixedBand 在覆盖式表单带场景下把副本直接写到下方行上而不插入任何内容; DeleteLastRow 则折叠最后一份副本,使尾部内容自然衔接(X-range 行为)
EmptyBandPolicyFixedBandDeleteLastRow
版本 2.357.0
新增
- PDF 导出可通过 FontFile3 OpenType 流和 CIDFontType0 后代字体嵌入带 CFF 轮廓的独立 OpenType 字体;自动和完整模式会保留完整的字体程序,而所需子集不可用则在输出提交之前失败
FontFile3CIDFontType0 OnGetFontDirectoriesOnGetFontDirectories 为请求的字体族和样式提供分号分隔的目录;被接受的目录树会递归搜索一次,并按内部字体元数据建立索引,以支持缓存式回退解析
更改
- 携带 OpenType GPOS 或传统字距调整数据的嵌入字体,现在无论简单文本还是复杂脚本都使用定位的字形推进宽度,使测量、换行、对齐和 PDF 字形放置保持一致
版本 2.356.0
新增
- PDF 字体嵌入成为可配置的四模式策略: FontEmbedding 可选择自动的历史行为、必要的子集化、完整程序嵌入,或仅映射模式(剥离字体程序但保留 CID 映射和 ToUnicode 表);PDF/A 拒绝仅映射输出
FontEmbedding - OnFontEmbed 事件在解析度量和字形映射之前针对每个 Unicode 字体触发一次,接收其名称和文件路径,并可通过显式的 Handled 约定接受逐字体的模式或替换字体字节
OnFontEmbedHandled
版本 2.355.0
新增
- 经典 XLS 重算现在使用惰性构建的依赖关系图,仅将输入变更传播到传递性依赖方,每轮都重算易失性公式,并按依赖顺序求值公式,而不再重新扫描整个稀疏单元格堆
- 经典 XLS 的循环引用现在遵循 EnableIteration 、 MaxIterations 和 MaxIterationChange ;强连通分量会隔离出相互独立的环,以确定性的方式迭代求解,然后再计算下游公式
EnableIterationMaxIterationsMaxIterationChange - PDF/A-3 关联文件新增了详细的 AddAttachment 重载,支持 Unicode 显示名称、描述、修改时间、转义的 MIME 名称、字节大小元数据,以及 Source、Data、Alternative、Supplement 或 Unspecified 关系
AddAttachment TXLSPDFWriterTXLSPDFWriter 可在不依赖工作簿的情况下创建独立的 PDF 文档,支持显式页面尺寸、多页输出、矩形、直线、椭圆、经过测量的样式化文本、坐标变换、矩形裁剪和图形状态控制
更改
- 在经典 XLS 上禁用 UseFullPrecision 时,公式和模拟运算表的缓存结果现在会先舍入到实际显示的数值精度,再供依赖公式使用,包括百分比格式和远离零的中点舍入
UseFullPrecision
修复
- 经典公式重算现在使用原生的从 0 开始的单元格坐标,把计算失败排除在成功缓存之外,并保留错误在依赖数组函数中的传播
版本 2.354.0
新增
- 图表坐标轴新增交叉模式枚举( Crosses :autoZero / max / min,未设置显式 CrossesAt 时输出为 crosses )以及每个轴的主/次刻度线样式( in 、 out 、 cross ),全部支持往返
CrossescrossesCrossesAtinoutcross AutoTitleDeleted图表上的 AutoTitleDeleted 取代了硬编码的自动标题标志,设置后会抑制由系列派生的标题
版本 2.353.0
新增
- 图表系列新增用于曲线渲染的 Smooth / SmoothSet 以及用于显式数据标记颜色的 MarkerFillColor / MarkerBorderColor ;两者都能在保存和打开时持久保留,共享渲染器会把平滑线段绘制为二次曲线并使用这些数据标记颜色
SmoothSmoothSetMarkerFillColorMarkerBorderColor
版本 2.352.0
新增
- 图表空间格式支持往返: RoundedCorners 、显式的图表背景与边框颜色以及绘图区背景色都能在保存和打开时持久保留,共享图表渲染器会使用这些背景和边框颜色,而不是总是绘制灰底上的白色
RoundedCorners - 图表保护开关通过一个总开关往返: ProtectionEnabled 连同 ProtectedChartObjects 、 ProtectedDataEditing 、 ProtectedFormatting 、 ProtectedSelection 和 ProtectedUserInterface 可输出并解析 OOXML 的 protection 元素
ProtectionEnabledProtectedChartObjectsProtectedDataEditingProtectedFormattingProtectedSelectionProtectedUserInterfaceprotection
版本 2.351.0
更改
- 共享分页渲染器中的条形图和柱形图现在遵循绘图组的布局选项:GapWidth 决定簇的宽度,Overlap 让条形变宽并使相邻条形相互靠拢,堆积/百分比堆积分组则会为每个分类累积出一根完整的簇条,而不是把各系列并排绘制
版本 2.350.0
新增
- 跨工作簿的区域复制现在会按值把每个单元格样式重新映射到目标工作簿的字体、填充、边框、数字格式、对齐和保护池中,因此在两个已打开的工作簿之间使用 CopyRangeTo 和 CloneRangeTo 时,格式不再依赖于池的顺序
CopyRangeToCloneRangeTo - 经典 XLS 工作簿可往返数字和日期类型的内置文档属性: CreatedDate 、 LastSavedDate 、 RevisionNumber 和 EditTimeMinutes 通过 OLE SummaryInformation 流持久保留,零值会被跳过,完整清除时会将其移除
CreatedDateLastSavedDateRevisionNumberEditTimeMinutes
版本 2.349.0
新增
- 经典 XLS 工作簿通过结构化属性暴露共享工作簿修订保护状态: SharedRevisionProtected 和 SharedRevisionPasswordHash 可往返,只要未显式写入这些属性,从解析文件捕获的原始记录体仍然优先
SharedRevisionProtectedSharedRevisionPasswordHash - 报表加密感知: TXLSCompiledReportTemplate.CreateEncrypted 可直接打开受密码保护的模板, RunToEncryptedFile 则一次调用即可运行报表并写出 ECMA-376 加密结果
TXLSCompiledReportTemplate.CreateEncryptedRunToEncryptedFile
版本 2.348.0
新增
- 两种引擎都支持剪贴板粘贴选项: PasteFromClipboard 接受仅数值模式(保留缓存结果,跳过公式、格式和合并)以及插入行/插入列模式——在数据块落位之前先移动现有内容
PasteFromClipboard - 前向读取器可报告被跳过的内容:直接读取器、行游标和前向读取器都暴露 OnSkippedRecord ,在跳过畸形单元格引用或 BIFF 工作表扫描因记录截断或不匹配而中止时触发
OnSkippedRecord
版本 2.347.0
新增
- 报表表格整形组合器: Filter 惰性流式筛出匹配的行, Sort 执行稳定的多键排序, Distinct 对每个键元组保留第一行
FilterSortDistinct - 数据源适配器: FromDataSet 把打开的 TDataSet 快照为报表表(字段名成为列,数据集位置会被恢复), FromObjects 则把任意对象列表和数组的 published 属性映射为列
FromDataSetTDataSetFromObjects - 双向报表带: RunBidirectional 让每个主行根据关联的子表生成各自的列,形成参差的列布局,较短的主行会把多余的克隆留空
RunBidirectional PreprocessAndRunPreprocessAndRun 会运行模板两次:第一遍填充值并执行结构性指令,让模板适应数据;第二遍重新编译被整形的簿并填充剩余的占位符
版本 2.346.0
新增
- 报表占位符可接受默认值:键缺失或为空时, {{name;fallback}} 会写入回退文本
{{name;fallback}} - 报表表达式新增 dbvalue(table, row, field[, default]) 和 dbcount(table) ,可按行和列读取任何已注册的数据上下文表;另有 tonumber(text) 用于字符串转数字,以及会跟随报表带副本的 ref(rowOffset, colOffset) 相对引用;模板、运行器和报表带都暴露 DataContext 属性
dbvalue(table, row, field[, default])dbcount(table)tonumber(text)ref(rowOffset, colOffset)DataContext - 裸的 {{=formula(...)}} 单元格现在会把活动公式写入单元格而不是纯文本,其他裸表达式则保留其求值类型(数字仍为数值)
{{=formula(...)}} - 新增结构性报表指令: {{#imgsize zoom=150}} 重新缩放锚定在指令单元格上的图像, {{#comment text}} 为单元格附加批注, {{#html <b>bold</b>}} 将片段送入富文本, {{#sheetvisible Sheet false}} / {{#deletesheet Sheet}} 控制工作表的可见性和删除
{{#imgsize zoom=150}}{{#comment text}}{{#html <b>bold</b>}}{{#sheetvisible Sheet false}}{{#deletesheet Sheet}}
版本 2.345.0
新增
- XLSX 工作簿新增保存时重算策略: RecalcBeforeSave 可选择手动(默认)、有脏数据才重算或总是重算的保存行为
RecalcBeforeSave RecalcNeededRecalcNeeded 报告当前是否有任何公式单元格或已捕获的编辑处于脏状态, RecalcCell 则重算工作簿并按工作表、行和列返回单个单元格新计算出的值RecalcCell
版本 2.344.0
新增
- 报表模板支持在单元格文本中使用结构性指令: {{#delete A2}} 清除命名区域, {{#format fmt=0.00 bold fill=FFFF00}} 对指令单元格上方的列应用数字格式、粗体、斜体、字体和填充颜色, {{#aggregate sum A2:A99}} 写出 =SUM(A2:A99) 样式的公式——所有这些都在值占位符填充之后执行,指令单元格随后被消费,未知的指令动词仍会作为模板诊断报告
{{#delete A2}}{{#format fmt=0.00 bold fill=FFFF00}}{{#aggregate sum A2:A99}}=SUM(A2:A99)
版本 2.343.0
新增
- ZIP 写入器可生成 ZIP64 归档:达到或超出 32 位大小限制的条目会在其本地文件头中保留 ZIP64 扩展字段并把经典字段置为哨兵值,中央目录记录会写出 64 位大小和偏移并相应提升所需版本号,只要任一经典字段达到饱和,中央目录结束记录之前就会写入 ZIP64 EOCD 记录和定位器
- 写入侧的条目和归档大小上限分别提升到 16 GB 和 64 GB;读取侧的解压防护保持不变
版本 2.342.0
新增
- 嵌入的图片带有无障碍元数据:每张图片上的 AltText 和 AltTextTitle 会序列化为绘图的 descr 和 title 属性,对于不回放原始锚点 XML 的工作簿,还能重新加载回类型化模型
AltTextAltTextTitledescrtitle
更改
- 切片器和日程表部件本就能通过不透明包层无损往返(本版本已进行端到端验证);这一往返约定现在由一个回归测试固定下来,覆盖包含切片器的包的打开和重新保存
版本 2.341.0
新增
- 报表运行器可对完成的输出执行自动调整:在所有目标应用之后、序列化之前, AutofitMode 选择对每个工作表执行行、列或两者兼有的处理, AutofitAdjustment 则在测量尺寸之上增加可选的余量
AutofitModeAutofitAdjustment - 自动换行的行会根据列宽测量出的行数确定高度,因此模板产生的多行单元格文本会像 Excel 自身的自动调整那样撑高行
版本 2.340.0
新增
- PDF 导出可以通过目录的 /PageMode 条目设置初始查看器模式——书签、缩略图、全屏、可选内容或附件
/PageMode - PDF 导出可以定义打开动作,在文档加载时以显式缩放比例跳转到所选页面,或打开书签面板
- XMP 元数据现在带有 DocumentID 和 InstanceID 标识、一个 xmpMM:History 事件、修改日期和元数据日期,以及归档验证工具所期望的 dc:format 声明
DocumentIDInstanceIDxmpMM:Historydc:format
版本 2.339.0
新增
- 物理打印管线:新增的 TXLSPrintDocument 通过共享分页模型打印工作表、工作簿或所有可见工作表,支持页面窗口、副本逐份整理和文档标题,并提供新页之前与页面生成之后的事件
TXLSPrintDocument - 工作簿查看器预览新增缩放模式——适合页面、适合宽度或 25% 到 400% 的显式比例——并支持 Ctrl+滚轮缩放、滚轮翻页,以及缩放后页面超出窗口时的水平平移
版本 2.338.0
新增
- 图表渲染会绘制数值轴:沿左边缘绘制刻度线和右对齐的数字标签,在启用时绘制主要网格线,还支持显示单位缩放、反转方向和对数钳制
- 分配到次数值轴的系列按自身的比例尺映射,因此组合图表可以保持主、次轴各自独立的数值幅度
- 气泡图渲染按面积缩放的气泡(由气泡大小列推导),而不是固定的标记圆点
- 当缓存为空时,内存中的图表会针对所属工作表解析其数值、分类和气泡区域,因此新建图表的渲染结果与加载的图表完全一致
- 图表模型新增可编辑的圆环图内径大小、第一切片角度、雷达图样式、复合饼图类型、拆分位置、拆分方式、第二绘图区大小和分类间距,全部在保存和加载时持久保留
修复
- 数据点带有数值但没有数字分类的分类图表不再以占位符中止渲染;此前这一问题会抑制所有柱形图、条形图和折线图的刻度线、网格线和系列输出
版本 2.337.0
新增
- 分页输出可以通过 SVG 导出器和分页模型上新增的 PrintComments 模式把单元格批注渲染为末尾清单:单元格地址、作者和文本显示在工作表最后一行数据下方
PrintComments - 具名绘图对象可通过 ExportObjectAsPNG 按配置的 DPI 和比例导出为 PNG 图像,并有仅测量的 GetObjectSize 对应方法,无需渲染即可返回对象以磅为单位的尺寸
ExportObjectAsPNGGetObjectSize - 位于已用区域之外的文本形状锚点现在也会像图表和图片此前已支持的那样扩展打印面
更改
- 分页渲染器现在会按处理缓存已解析的单元格字体,并对重复的文本测量进行记忆化,从缩小字体填充循环和自动换行中消除冗余的字体池读取和 GDI 测量调用
版本 2.336.0
新增
- 单元格文本旋转现在可在页面图像、SVG、打印和预览输出中呈现:1-90 度的逆时针和顺时针角度围绕单元格中心旋转,255 竖排形式则每行输出一个字符
- 下标和上标单元格以偏移的基线和缩小的字形渲染,不再丢失垂直对齐
- 页眉和页脚区在所有由分页驱动的输出中都会遵循其 &nn 磅值和 &K 颜色格式代码
&nn&K - 分页输出中的列宽来自工作簿常规字体测量出的最大数字宽度,因此基于 Calibri 11 以外字体的工作簿也能以与 Excel 一致的列边界进行分页
- 设置了自定义经典网格颜色的工作表会用该调色板条目渲染网格线,而不是固定的灰色默认值
版本 2.335.0
新增
- 约七十个经典工作表函数现在除了被解析之外还能求值:数学与三角函数组
ATAN2 ASIN ACOS SINH COSH TANH ASINH ACOSH ATANH EVEN ODD、日期和时间组TIME HOUR MINUTE SECOND DATEVALUE TIMEVALUE DAYS360、财务组MIRR IRR IPMT PPMT DB、TRANSPOSE TYPE N ADDRESS ROMAN HYPERLINK MAXA MINA,以及分布与统计函数族的 2010 之前拼写,如NORMSDIST TDIST CHIDIST FDIST POISSON QUARTILE PERCENTILE PERCENTRANK COVAR CHITEST GAMMALN,它们会转发到共享同一参数列表的带点实现
修复
NORMSDIST等旧式单参数正态分布 CDF 形式之前计算出的误差函数近似值缩放不正确MIRR之前在复利计算正现金流时使用的周期指数差了一期,导致结果偏离 Excel 的数值
版本 2.334.0
新增
- 由单个值字段构成的报表带占位符现在会把原始数据类型写入目标单元格:数字保持数值、日期保持日期单元格并在单元格为“常规”格式时获得默认日期格式、布尔值保留其单元格类型,因此在生成的报表上,下游的 SUM、排序和图表引用都能正常工作
- 自定义表格样式获得了完整的节集合,包括透视表小计、子标题、空行和页字段节,通过 SetSectionEx 支持每节的字体名称、字号、斜体、条纹大小和四边边框,外加 pivot / table 标志、 DefaultTableStyleName / DefaultPivotStyleName 工作簿属性,以及样式、节和 dxf 属性在加载侧的完整往返
SetSectionExpivottableDefaultTableStyleNameDefaultPivotStyleName - 不带密码打开加密的 XLSX 工作簿时,现在会触发 TXLSXWorkbook.OnPassword ,其重试约定与经典引擎相同,让 GUI 密码提示无需事先知道文件已加密
TXLSXWorkbook.OnPassword - 带密码保存经典 BIFF5 工作簿时现在应用 XOR 混淆,BIFF8 工作簿则可通过 EncryptionType 选择标准 RC4,从而在既有 RC4 CryptoAPI 默认值之外补全经典加密矩阵
EncryptionType - 页面图像、SVG、打印和预览输出中的工作表文本渲染现在会遵循垂直对齐和 WrapText 自动换行(采用贪心断行),而不再把换行单元格裁剪为单行居中文本
修复
- 错误单元格现在会在所有渲染路径中显示其 Excel 错误字面量(如 #DIV/0! 或 #REF!),而不是未定义的空文本
- 自定义表格样式节现在以架构规定的 tableStyleElement 形式写出,让 Excel 能识别该样式;节的字体颜色不再丢弃其粗体设置
tableStyleElement - 当报表带增长超过初始容量时,报表带快照会保留每个绑定列的值
版本 2.333.0
新增
TXLSPDFSignature.CertificationPolicyTXLSPDFSignature.CertificationPolicy 可创建 DocMDP 认证签名,许可级别分别对应不允许更改、允许填写表单并签名,以及允许填写表单、签名和添加注释;经过认证的目录通过 /Perms 引用该签名,普通认证输出使用 PDF 1.5,而不兼容的 PDF/A-1 认证会在目标流被改动之前被拒绝/Perms
版本 2.332.0
更改
- 自动带标签的 PDF 现在会输出完整的表格结构,包含行、语义化的表头单元格和数据单元格、密集的每页标记内容标识符、精确的父树映射、合并单元格的行跨与列跨,并对页面装饰、图表、图像、页眉和页脚进行工件隔离
修复
- 重复使用同一个 PDF 导出器时,现在会在文档之间清空二进制对象槽位,避免在对象编号变化时,先前导出的 ICC 配置文件、图像或其他流顶替新分配的对象
版本 2.331.0
新增
- 统一的 XLSX 绘图外观层暴露混合的图像、图表、文本框、保留锚点和组顺序,支持向前、向后、置顶、置底、感知变换的组以及保存后重新打开取消分组等操作,并保留绘图关系
- 命名样式支持自动或显式关联的格式部件,同时保留局部覆盖,全部 60 种内置浅色、中色和深色表格样式均通过共享的 HTML、PDF、图像、预览和查看器格式路径解析
TXLSPDFBookmarkTXLSPDFBookmark 支持分层 Unicode 书签、同级与子级关系、颜色、粗体或斜体标题,以及展开或折叠的后代TXLSPageImageExporter.ExportAllAsTiffTXLSPageImageExporter.ExportAllAsTiff 将选定页面作为单个 LZW 压缩多页 TIFF 写入流或文件,支持进度、取消和原子文件替换- 经典 XLS 打开可在全局元数据之后停止,或通过经过验证的 BOUNDSHEET 偏移直接定位到选定的工作表,包括加密流的重新定位
BOUNDSHEET TXLSFormatSnapshotTXLSFormatSnapshot 独立于其源工作簿捕获完整的经典单元格格式, IXLSRange.ApplyFormat 可将其应用到单元格、行或列区域IXLSRange.ApplyFormat- 兼容的行主序类型化 XLSX 批量写入使用打包的 RLE 存储,提供公开的打包单元格和字节统计信息,以及为稳定对象句柄进行的一次性透明物化
更改
- 仅含样式的空白 XLSX 单元格共享引用计数的负载,并支持写时复制的局部编辑、跨批量格式化的自动压缩、命名样式更新、复制、排序、格式补丁、保存和加载路径,以及可测量的避免负载字节数
- 动态数组直接流入标量聚合,重复的精确查找复用类型化的增量区域缓存,不可变的无状态公式标记在多次编译之间共享
- 椭圆弧使用由平坦度驱动的自适应三次贝塞尔细分,由 PDF、SVG 和位图输出共享,仅在比例或离心率需要时提高精度
- XLSX 包输出现在稳定共享字符串、超链接、关系和部件顺序,使反向构造产生字节一致的确定性包
- 统一的 XLS、XLSX、CSV 和 TSV 前向读取器保持内存有界;BIFF8 共享字符串续段在超过可配置阈值时溢出,同时保留投影、选定工作表、加密和畸形输入防护
修复
- C++Builder Win64 包链接不再从工作簿比较和导入检查单元发出重复的 Delphi 泛型对象列表 vtable
版本 2.330.0
新增
TXLSXWorksheet.SubtotalTXLSXWorksheet.Subtotal 为已排序的数据区域插入分组小计行、可配置的合计行、公式、继承的可见格式以及 Excel 兼容的大纲级别GetCellVisibleFormatGetCellVisibleFormat 在不物化空单元格的情况下解析工作表、行、列、区域覆盖和显式单元格格式CheckDataValidationCheckDataValidation 针对覆盖单个单元格的规则测试候选值,并且仅当有效时才能原子地提交它
更改
- 查找扫描备忘使用紧凑的精确二进制键和每次缓存命中单次负载查找,减少重算分配和哈希表工作,而不改变查找比较
- 固定宽度 CSV 导出在单次操作中填充每个字段,使填充时间与配置的输出宽度呈线性关系
修复
- 向后 ReplaceTextIn 扫描现在按请求的反向扫描顺序调用替换回调
ReplaceTextIn - 没有值或公式的样式单元格不再阻塞 SVG、图像和预览渲染中相邻文本的溢出
- 经典 XLS 数字输出在写入 BIFF 数字记录之前,除了非有限和次正规值之外,还会规范化负零
版本 2.329.0
新增
A1ToR1C1A1ToR1C1 将 A1 样式公式转换为 R1C1 表示法(相对偏移、绝对 $ 形式、区域,以及通过 R1C1ToA1 的往返转换),完成引用样式转换的两个方向$R1C1ToA1
更改
- 重算查找备忘会在 VLOOKUP 、 XLOOKUP / XMATCH 和 MATCH 中跳过少于五个单元格的扫描向量,此时原始扫描比字典往返更廉价
VLOOKUPXLOOKUPXMATCHMATCH
版本 2.328.0
新增
- SVG、图像和预览输出背后的共享页面渲染器现在绘制 XLSX 单元格样式:实心填充(带 alpha)、逐单元格字体与颜色、水平对齐(采用 Excel 的数值右对齐默认值)、Excel 式边框合并(较重的共享边获胜)、按列缩放字体的收缩适配,以及长文本溢出到连续的相邻空单元格
版本 2.327.0
新增
- CSV/TSV 加载器新增逐列导入指令( cctText 、 cctNumber 、 cctDate 、 cctBoolean 、 cctSkip ),镜像 Excel 的文本导入向导,因此单个列可被强制为文本以保留前导零、被强制为某种类型,或从导入中剔除
cctTextcctNumbercctDatecctBooleancctSkip - 固定宽度文本导入:分配字段宽度会将加载器从分隔符解析切换到字符位置切片,而保存器可输出带截断功能的空格填充固定宽度列
版本 2.326.0
新增
- XLSX 工作表搜索新增窗口化 FindTextIn 和 ReplaceTextIn 方法,将扫描限制在矩形单元格区域内,并增加一个镜像 Excel 查找与替换对话框中 按列搜索 模式的列主序扫描顺序标志;向后扫描现在接受零锚点,以便从右下角开始
FindTextInReplaceTextIn - 保存现在会防护超过 Excel 8192 字符限制的公式,快速失败并识别出有问题的单元格,而不是写入一个 Excel 需要以修复模式打开的工作簿
修复
- 非有限数值单元格值(NaN 以及正或负无穷)不再可能将无法解析的标记泄漏到已保存的 XLSX 部件中;它们现在会被序列化为 #NUM! 错误单元格,并且次正规双精度值在 XLSX 和 BIFF8 写入器中都会清零,与 Excel 可存储和显示的内容一致
#NUM!
版本 2.325.0
新增
- 工作簿格式 API 现在包含可编辑的 XML 映射与架构绑定、有序的多工作簿窗口、多区域与按窗格选择,以及由调用方持有的、针对 XLS 与 XLSX 的无损公式标记检查、重建、引用替换与原子写回
- 工作簿处理现在包含支持自定义比较器与显式公式移动的稳定横向或纵向排序、BIFF2 至 BIFF4 的样式与公式转换、面向 XLS、XLSX、CSV 与 TSV 的统一投影正向读取门面、类型化自定义视图,以及可编辑的 OLAP、Web 表、固定文本与参数连接子模型
- 计算与检查现在包含结构化的缺失函数、外部引用与循环依赖诊断、全局与工作簿本地的 UDF 注册表、Unicode 双向可视化排序、合并单元格 AutoFit 策略、类型化的 Excel 4 宏表保留与命令扫描,以及 ISOMITTED 、 ARRAYTOTEXT 、 VALUETOTEXT 、 PDURATION 与 RRI 函数
ISOMITTEDARRAYTOTEXTVALUETOTEXTPDURATIONRRI - 编译式报表现在涵盖整个工作簿占位符、命名行、列与交叉表带、可扩展的 Excel 表带、统一的表与游标抽象、精确的复合键关系索引、惰性数据上下文、流式表组合子、受控的命名查询提供程序、按记录工作表带、溢出延续工作表,以及不可变的递归包含
- 报表创作现在包含编译条件、查找、正则表达式、动态公式与格式、图像字段、图表系列重绑定、带流或原子文件输出的可重用运行器、感知依赖的范围克隆、固定页脚与均衡分页规划、带地址的诊断、严格执行、模板检查,以及受支持旧版占位符的安全迁移
- PDF 输出现在包含自动标记的结构树、可见或不可见的主机签名域、明确的 a 级与 b 级 PDF/A-1、PDF/A-2 与 PDF/A-3 一致性配置文件、原子进度与取消、感知样式的缓存字体回退、上下文相关的复杂文本整形、原生多停靠点渐变、逐停靠点透明度、单元格填充图案、阴影,以及定位的批注注释
- 共享渲染现在包含原生范围、页面、工作簿与命名对象 SVG、增量 PNG 与 JPEG 页面、与后端无关的布局几何、HTML 中的内联矢量图表与形状、带共享 CSS 的有状态部分 HTML 会话、渲染图片效果、矢量预设形状与 WordArt 几何、高级科学与金融图表细节,以及确定性的数据标签碰撞与引导线布局
更改
- 全部 55 项经审计的能力条目(F01 至 F18、R01 至 R19 以及 V01 至 V18)现在都拥有已完成的支持实现,并具备明确的归属、格式安全、取消与输出边界
- 大型报表模板只编译一次对象目标与表达式、只实例化已绑定的轴字段、只消费一次数据游标、对关系与连接键进行哈希处理、为重复的不相交克隆冻结源集合前缀,并避免重新扫描已生成的工作簿对象
- 渲染路径共享分页、几何、对象放置、效果状态与文档资源缓存,而 PDF、SVG、HTML、位图、图元文件、预览与打印输出只保留其各自格式专属的编码器
修复
- XLSX 单元格写入事件现在序列化其有效替换值而不保留过时的富文本运行,BIFF 外部名称标记保留完整的 4 字节名称索引,并且顶层连接源独立于文本导入源进行往返,同时保留旧版源回退
- 旧版 BIFF 样式与公式含义、工作簿窗口与选择重映射、混合绝对公式引用、公式标记所有权以及无效标记写回,现在在加载、编辑与保存过程中都保持确定性的无损行为
- 报表展开现在会在结构性写入之前拒绝确定性的表、筛选、名称、重叠、部分对象、网格与查询支持的冲突,在可表示之处保留零行表基数、保持超过 2^53 的精确整数连接键,并在取消或失败后报告确定性的应用计数
- PDF 与矢量导出现在保留回退字体的 Unicode 映射、字素与整形簇、归档配置文件限制、渐变透明度、图像效果、图表装饰、密集标签放置与输出原子性,且不会因重复内容而产生资源增长
版本 2.324.0
新增
- 通过 TXLSFormulaTokenStream 、 ParseFormulaTokens 、 GetFormulaTokens 、 FormulaTokensToText 与 SetFormulaTokens 对 XLS 与 XLSX 进行无损公式标记检查与受保护的写回,公开 RPN 标记种类与类别、原始 BIFF 标记与附加负载、独立的引用标志、克隆、引用替换、上下文来源以及精确兼容的 BIFF 复用,同时在修改单元格之前拒绝格式错误、不兼容、数组所有或不受支持的流
TXLSFormulaTokenStreamParseFormulaTokensGetFormulaTokensFormulaTokensToTextSetFormulaTokens - 通过 TXLSCompiledTableReportBand 的可扩展 Excel 表报表带使用一个有界游标快照来展开单个数据模板行,同时保留页眉、总计、表与自动筛选范围、筛选与排序状态、列元数据、计算与总计公式、样式、结构化引用以及依赖的工作表对象;可表示的零行结果会移除模板数据行,而查询支持、冲突、无效与溢出布局则在写入之前失败
TXLSCompiledTableReportBand - 通过 SetFontFallbackChain 、 AddFontFallback 与 ClearFontFallbackChains 实现的感知样式 PDF 字体回退链按字形覆盖范围解析源字族与样式层级、缓存已加载的字面与选择、保留补充标量与跨运行的字素簇、为共享字形的 Unicode 序列分配不同的 CID、嵌入独立的 TTC 字面,并在没有任何可用嵌入字形时原子性地拒绝 PDF/A 输出
SetFontFallbackChainAddFontFallbackClearFontFallbackChains
版本 2.323.0
新增
- 通过 TXLSCompiledReportTemplate 实现可重用的工作簿报表模板:占位符只编译一次,可重复应用而无需重新扫描工作簿,使用排序后的值查找与预拆分的文本片段,涵盖单元格、富文本、批注、线程批注、超链接、文本框、图表标题与系列名称、页眉与页脚、工作表名称、已定义名称与文档属性
TXLSCompiledReportTemplate - 通过 IXLSReportTable 、 IXLSReportCursor 、惰性 IXLSReportTableProvider 加载、随机访问内存表以及 TXLSReportRelationIndex 实现报表数据绑定,后者只构建一次复合键子项哈希并保留行号,而不是为重复的主从查找复制行负载
IXLSReportTableIXLSReportCursorIXLSReportTableProviderTXLSReportRelationIndex - 公式计算现在会求值 PDURATION (达到目标投资值所需的期数)与 RRI (等效的定期增长率),包括与 Excel 兼容的数值错误边界以及必需的 OOXML _xlfn. 存储前缀
PDURATIONRRI_xlfn - 公式计算现在会求值 ISOMITTED 、 ARRAYTOTEXT 与 VALUETOTEXT ,包括一个与空白单元格保持不同的专用省略参数值、BIFF 缺失参数标记的往返、一维与二维数组、严格的字符串转义、本地化分隔符、错误转换规则以及 OOXML 未来函数前缀
ISOMITTEDARRAYTOTEXTVALUETOTEXT - 通过 TXLSXWorkbook.AnalyzeFormulaIssues 的结构化公式预检报告缺失函数、外部工作簿引用以及带单元格坐标与有界成员列表的精确循环依赖组件,同时字符串字面量与本地结构化引用不会被误匹配
TXLSXWorkbook.AnalyzeFormulaIssues - 通过 TXLSXWorksheet.CloneRangeTo 的感知依赖范围克隆在一次操作中复制选定的单元格、合并区域、条件格式、数据验证、超链接、批注、图像与图表,重新定位应用范围与锚点,并以混合相对与绝对引用语义转换公式负载;报表带对依赖对象使用同一路径
TXLSXWorksheet.CloneRangeTo - 通过 TXLSPDFExport.OnProgress 、 OnProgressEx 与 Cancel 实现的 PDF 导出进度与取消:开始、页面与结束通知只增加可忽略的回调开销,取消在行遍历与页面对象之间检查,被取消的流不会收到不完整的 PDF,且导出器保持可重用
TXLSPDFExport.OnProgressOnProgressExCancel - 通过 TXLSCompiledReportTemplate.Analyze 、严格执行与 WriteDiagnostics 实现的编译报表诊断会在变更之前识别缺失值、空占位符与未闭合占位符(含目标类型以及工作表与单元格坐标),或将相同发现写入诊断工作表
TXLSCompiledReportTemplate.AnalyzeWriteDiagnostics - 通过 TXLSCompiledReportRunner 实现的可重用报表执行提供开始、目标与结束进度及完成、取消与失败状态,支持在第一次写入之前或编译目标之间取消,报告精确的应用计数,并在取消或异常后无需重新扫描工作簿即可保持可重用
TXLSCompiledReportRunner - 针对经典 XLS 与 XLSX 的合并单元格 AutoFit 策略允许第一行或最后一行(或列)吸收所需的增长量,或将其均匀分布到整个合并跨度上,同时保留旧版重载行为、隐藏状态、显式边界与确定性的重复调用
- 通过 TXLSPDFExport.ExportCommentsAsAnnotations 实现的可选 PDF 批注注释将 Unicode 作者与批注文本放置在原始单元格矩形上,同时保留现有的文末批注页;每工作表的批注索引以约 O(C log C) 时间构建,并支持 O(log C) 的单元格查找
TXLSPDFExport.ExportCommentsAsAnnotations - 分层用户定义函数注册表让 XLS 与 XLSX 工作簿共享进程级处理程序,同时保留工作簿本地覆盖、替换、移除、清除以及现有的工作簿事件回退;平均查找为 O(1),本地匹配会遮蔽全局名称,处理程序在注册表锁之外运行,从而实现安全的并行重算与自移除
- 通过 TXLSReportTableFactory 的惰性报表表组合子提供前 N 行、列投影、行数、最小值与多个聚合定义、架构映射联合、连续拆分分区以及保留重复项的内部或左哈希连接,而无需实例化完整的中间行负载
TXLSReportTableFactory - 通过 TXLSPageImageExporter 的增量 PNG 与 JPEG 页面导出支持 XLS 与 XLSX 区域、工作表与工作簿,具备页面选择、DPI、缩放、JPEG 质量、进度、取消与可重用会话;每个会话构建一个分页模型,并在每个页面之后释放位图内存
TXLSPageImageExporter - 通过 TXLSXWorkbook.WorkbookViews 的多个 XLSX 工作簿窗口保留独立的活动选项卡、第一个可见工作表、可见性、最小化状态、几何、选项卡显示、滚动、未知属性、扩展以及正确重映射的工作表视图绑定,而现有的单窗口属性继续指向第一个视图
TXLSXWorkbook.WorkbookViews - 通过 TXLSCompiledReportBand 的命名行、列与交叉表报表带从单次通过的有界数据快照结构性展开定义名称模板,保留公式与依赖的工作表对象,平铺显式的行与列元数据而不创建零大小的默认值,并复用固定的源集合边界,从而使同一工作表上的重复克隆不会重新扫描已生成的负载
TXLSCompiledReportBand - PDF 导出现在将两停靠点与多停靠点的轴向或径向渐变写为原生 PDF 着色,复用相同的函数、着色与透明资源,将每个填充裁剪到其单元格,并应用实心或统一渐变透明度,而不再使用先前的带状矩形近似
修复
- 自定义的基于点的纸张宽度与高度覆盖现在同时参与分页带计算与最终页面对象,因此分页符与渲染尺寸使用相同的可用区域
版本 2.322.0
新增
- 公式计算现在会求值第一类贝塞尔函数 BESSELJ (振荡型)与 BESSELI (修正型),通过幂级数与项递推计算,以便在整个实用参数范围内保持数值稳定
BESSELJBESSELI
版本 2.321.0
修复
- XLSX RTF 导出现在构建真实的字体表,而不是硬编码 Calibri:预扫描收集每个不同的单元格字体名称, \fonttbl 以各自的 \fN 索引列出每个字体,每个单元格的文本引用其实际字体——使用 Times New Roman、Courier New 或任何其他字体设置样式的工作簿在 Word 或 WordPad 中打开时不再视觉上重排为 Calibri
\fonttbl\fN
版本 2.320.0
修复
- PDF 导出现在在经典 XLS 引擎路径上渲染文本旋转:具有 90 度或 270 度方向的单元格通过围绕单元格中心旋转的 PDF 文本矩阵垂直绘制其文本,与现有 XLSX 路径行为一致;此前,在从 .xls 工作簿生成的 PDF 中,垂直页眉与旋转标签会水平渲染
.xls
版本 2.319.0
新增
- 公式计算现在会求值依赖 Excel 365 LAMBDA 的数组组合子 MAP (逐元素变换)、 REDUCE (折叠为单个值)、 SCAN (折叠并溢出每个中间步骤)、 MAKEARRAY (按行与列索引构建)、 BYROW (按行聚合并溢出为一列)与 BYCOL (按列聚合并溢出为一行),从而与现有的 LAMBDA 与 LET 支持一起补全 LAMBDA 函数式编程家族
MAPREDUCESCANMAKEARRAYBYROWBYCOLLAMBDALET
版本 2.318.0
新增
- 公式计算现在会求值债券与国库金融函数: COUPDAYBS 、 COUPDAYS 、 COUPDAYSNC 、 COUPNCD 、 COUPPCD 、 COUPNUM (票息日数基础原语)、 PRICE / YIELD (采用二分法收益率求解器的标准债券定价)、 PRICEDISC / YIELDDISC (贴现证券)、 PRICEMAT / YIELDMAT (到期型)、 DURATION / MDURATION (麦考利与修正久期)、 TBILLEQ / TBILLPRICE / TBILLYIELD (国库券)、 DISC / INTRATE / RECEIVED (贴现与利息)、 ACCRINTM (到期应计利息)、 DOLLARDE / DOLLARFR (分数美元转换)、 EFFECT / NOMINAL (实际与名义利率)、 CUMIPMT / CUMPRINC (累计利息与本金)、 FVSCHEDULE (可变利率终值)以及 AMORDEGRC / AMORLINC (法国式折旧);所有这些都共享一个自包含的嵌套票息日期引擎,支持五种标准日数基准
COUPDAYBSCOUPDAYSCOUPDAYSNCCOUPNCDCOUPPCDCOUPNUMPRICEYIELDPRICEDISCYIELDDISCPRICEMATYIELDMATDURATIONMDURATIONTBILLEQTBILLPRICETBILLYIELDDISCINTRATERECEIVEDACCRINTMDOLLARDEDOLLARFREFFECTNOMINALCUMIPMTCUMPRINCFVSCHEDULEAMORDEGRCAMORLINC
版本 2.317.0
新增
- 加密工作簿加载现在接受声明使用 SHA-256 哈希算法的 Agile Encryption 文件(由某些第三方写入器生成):密码密钥派生、旋转循环、密码验证器以及数据完整性密钥/值 IV 与 HMAC 都遵循声明的哈希,而密钥数据与密钥加密器之间声明哈希不匹配的文件仍会被拒绝;保存时继续写入 Excel 默认的 SHA-512 变体
版本 2.316.0
新增
SortRangeSortRange 在两个工作簿引擎上都保留公式:公式单元格随其行移动,其相对引用按照 Excel 的排序语义重新锚定($-绝对部分保持不变,移出网格的引用就地钳制),因此排序后的表会继续计算,而不会坍缩为数值- 工作表背景图像: SetBackgroundImage 在 XLSX 工作表的单元格后面平铺一张图片(仅用于显示,与 Excel 一样),并通过工作表的 picture 元素、其媒体关系与包内容类型实现往返
SetBackgroundImagepicture
修复
- 重算引用从未触碰的空单元格的算术公式时,不再因转换错误而中止——空操作数像 Excel 一样贡献 0
版本 2.315.0
新增
CopyToClipboardCopyToClipboard 在两个工作簿引擎上随文本与 HTML 一起发布原生 Biff8 剪贴板格式,因此粘贴到 Excel 或其他 HotXLS 工作簿中的区域会携带值、公式、数字格式、字体、填充、边框、对齐与合并单元格,而不再是纯文本PasteFromClipboardPasteFromClipboard 在存在 Biff8 负载时优先使用它:从 Excel 粘贴的文本保留其原始值,而无需依赖区域设置的日期与数字重新解析,公式将其相对引用重新锚定到粘贴目标,合并区域在目标位置重建;两个引擎也会以完整格式粘贴彼此的块
更改
- 粘贴到 Excel 中的公式以其计算值到达(这是 Excel 第三方 Biff8 剪贴板解析的限制);其他所有内容——文本、带格式的数字、填充、边框与合并——都能无损粘贴到 Excel,而公式在 Excel 到 HotXLS 与 HotXLS 到 HotXLS 的方向上都能完整保留
版本 2.314.0
新增
- XLSX 工作表上的照相机对象: AddCamera 放置一个绑定到单元格区域的实时快照图片——即 Excel 照相机工具的链接图片——范围绑定写入文档化的绘图扩展,占位图像按锚点调整大小;由 Excel 创建的照相机对象在重新打开时保留其范围绑定
AddCamera
版本 2.313.0
新增
- XLSX 包的就地工作表修补:流式写入器上的 BeginPatch 打开现有工作簿并只重写一个工作表——其他所有部件(样式、绘图、图表、数据透视表、自定义部件)都按其压缩字节原样复制,不解压也不重新编写任何内容,因此大型模板的数据表只需完整重建的一小部分时间即可刷新
BeginPatch - 修补模式还可以追加新工作表:该工作表登记在工作簿部件列表、关系与内容类型中,编号永远不会与现有部件冲突,并遵循包自身的 strict 或 transitional 关系约定
- 修补后的包会自动丢弃过期的计算链(Excel 会在加载时重建),而需要新包部件的功能(表、图表、图像、批注、已定义名称)会报告清晰的错误,而不会写出无效的包
版本 2.312.0
新增
- Strict Open XML 输出:在 XLSX 工作簿上设置 StrictOOXML 会以 ISO/IEC 29500 strict 一致性保存包——工作表、共享字符串、样式、主题、绘图、图表、批注、文档属性与保留部件中的所有命名空间声明和关系类型都会从 transitional 词汇切换为 strict 的 purl.oclc.org 词汇,而内容类型、部件名称与 VML 词汇保持不变,因为两种一致性类别都共享它们
StrictOOXMLpurl.oclc.org - 读取 strict 一致性工作簿现已完整:以 strict 形式编写的关系类型解析到与其 transitional 对应项相同的目标,补充了 strict 元素命名空间接受能力,因此以 Excel 的 "Strict Open XML Spreadsheet" 模式保存的文件可以像任何其他工作簿一样打开
- 启用 strict 输出保存时,对于仅以 Microsoft 扩展形式存在的功能(VBA 工程、表单控件、线程批注、动态数组元数据),会报告清晰的错误,而不会写出无法通过验证的包
修复
- 自定义文档属性声明了一个拼写错误的 value-types 命名空间,这可能导致 properties 部件在外部工具中验证失败
版本 2.311.0
新增
- 读取 XLS 工作簿时保留无法识别的工作表记录:类型化解析器未建模的任何记录都会原样捕获并在保存时重放,因此携带供应商特定或更新规范记录的文件可以经 HotXLS 往返而不丢失
版本 2.310.0
新增
- XLSX 工作表上的预设几何形状: AddPresetShape 将 187 个 OOXML ST_ShapeType 预设标记( rightArrow 、 flowChartDecision 、 star5 ……)中的任意一个原样写入绘图的 <a:prstGeom> , PrstToken 属性让现有形状切换几何——标记在保存与重新打开之间往返
AddPresetShapeST_ShapeTyperightArrowflowChartDecisionstar5<a:prstGeom>PrstToken
版本 2.309.0
新增
- 工作表上的模板处理: ApplyTemplate 替换所有单元格中的 {{key}} 占位符——值保留其原生类型,公式占位符在解析之前替换—— FillTemplateBand 每条记录克隆一次模板块,并带逐克隆公式行翻译、合并区域克隆以及用于行级条件判断的 #skip 字段,将任何手工制作的工作表变成数据驱动的报表生成器
ApplyTemplate{{key}}FillTemplateBand#skip
版本 2.308.0
新增
- PDF 导出可以附加文件: AddAttachment 将原始文档作为 /EmbeddedFiles 条目(文件规范、带可选 MIME 子类型的嵌入流以及目录名称树)带入导出的 PDF,因此报表与其支持数据一起随单个自包含文件交付
AddAttachment/EmbeddedFiles
更改
- 读取带无法识别的 BIFF 版本字的 XLS 工作簿时不再拒绝整个流:读取器回退到 BIFF8 布局,因此来自发出异常版本号的写入器的文件在其记录可解析时仍能加载
版本 2.307.0
新增
- 集中的临时文件管理:库创建的每个临时文件都会被登记并清理,因此中止的导出或在创建与删除之间的异常不再遗留孤立的临时文件
VerifyEncryptedSaveVerifyEncryptedSave 通过完整的解密管道重新打开刚刚写入的加密容器,并在密码无法解锁时使保存失败——损坏的容器会立即暴露,而不是在用户下次打开时才发现- 数据集导出在行拆分启动时引发 OnExportLimit 事件,并且各格式版本的工作簿网格限制作为常量公开(BIFF8 为 65536×256,2007+ 格式为 1048576×16384),用于能力协商
OnExportLimit
版本 2.306.0
新增
- XLSX 工作表新增表单控件创作能力: AddFormButton 、 AddFormCheckBox 、 AddFormRadioButton 、 AddFormComboBox 与 AddFormListBox 写出带标题、链接单元格、勾选状态与宏绑定的按钮 / 复选框 / 单选 / 下拉 / 列表控件——保存路径发出 VML 形状、每控件 ctrlProps 部件、其关系与内容类型条目,携带控件在重新打开时将其部件原样往返
AddFormButtonAddFormCheckBoxAddFormRadioButtonAddFormComboBoxAddFormListBoxctrlProps
版本 2.305.0
新增
- PDF 导出新增可选 UsePDFA 模式,生成标识为 PDF/A-2b 的文档:sRGB IEC61966-2.1 配置文件作为 GTS_PDFA1 输出意图嵌入,XMP 元数据携带 pdfaid 部件/一致性标识,标头声明 PDF 1.7——配合嵌入的 TrueType 字体( UnicodeFontFile 或自动选择的已安装字体)即可获得可存档的输出
UsePDFApdfaidUnicodeFontFile
版本 2.304.0
新增
- 实时跨工作簿求值: RegisterExternalWorkbook 将工作簿对象与簿名称配对,因此 [Book.xlsx]Sheet!A1 之类的公式可以编译( [Book]Sheet!Ref 前缀现在解析为真实的外部引用),并在每次重算时读取已注册对象的当前状态;取消注册会丢弃实时链接并回退到外部链接缓存
RegisterExternalWorkbook[Book.xlsx]Sheet!A1[Book]Sheet!Ref
版本 2.303.0
新增
- 通过 TXLSXWorkbookCompare 进行工作簿比较:按名称配对工作表,并报告新增/移除的工作表、新增/移除的单元格、变化的值、变化的公式以及新增/移除的合并区域——既以结构化差异列表形式供工具使用,也通过 Report 以每条差异一行的人类可读文本呈现
TXLSXWorkbookCompareReport
版本 2.302.0
新增
- 流式直接写入器新增拉取模式行供应: OnNeedRow 对每个待处理行触发一次,供应方将该行直接写入写入器,并声明数据结束以停止——数据管道无需预缓冲行列表即可驱动导出
OnNeedRow
版本 2.301.0
新增
- ODS 导出现在会写入单元格公式:同一工作表内的引用会转换为标准的 of:= OpenFormula 拼写(方括号引用、分号参数分隔符、字符串字面量保持不变),而带工作表限定符的引用和结构化引用则沿用 Excel 自身用于跨套件往返的 msoxl: 透传机制——保存后的包会以原始的 Excel 公式文本重新打开
of:=msoxl:
版本 2.300.0
新增
- 从右到左的工作表现在在所有位置都以镜像方式渲染:PDF 导出会跨可打印宽度翻转列几何布局(A 列位于右侧,单元格内容不变),两个 HTML 导出器都会在表格上发出 dir="rtl" ,让浏览器翻转列顺序——该工作表标志已可通过 XLSX 与 BIFF 往返
dir="rtl"
版本 2.299.0
新增
- 数据集导出( TDataToXLS )新增标题带与页脚带: Title 在页眉上方渲染一行合并、加粗样式化的行(使用自身的 TitleFont 与可选的 TitleColor ), Footer 在最后一行数据或汇总行下方追加一行
TDataToXLSTitleTitleFontTitleColorFooter ForEachFormattedCell工作表上的 ForEachFormattedCell 会按行/列顺序遍历每个已填充的单元格,并通过回调提供其显示文本——已应用数字格式——可供索引与文本提取使用
版本 2.298.0
新增
- ApiTour 示例现在启动即进入实时展示:一个包含 KPI 磁贴、跨工作表 SUMIF / COUNTIF 公式、数据条、色阶、图标集与两个图表的内存销售仪表盘,会在示例启动瞬间渲染在内嵌的工作簿查看器中;每个网格单元格仍可编辑,并带有即时重算与刷新的条件格式;一键操作可将展示导出为 PDF、HTML 与 CSV,或移交给 Excel,同时显示实时的构建与导出耗时
SUMIFCOUNTIF - C++Builder 版 ApiTour 示例复刻了新的 Delphi 展示、内嵌查看器、公式栏、导出操作与活动日志
更改
- ApiTour 示例用窗口内活动日志取代了模态结果对话框,同时经典的创建、修改与导出演练保持原有行为
版本 2.297.0
新增
- PDF 导出新增可选的 UseXRefStream 模式,可生成带有压缩对象流与二进制交叉引用流的 PDF 1.5 文件:小型字典对象在一个 Flate 压缩容器内传输,经典的 xref 表与 trailer 被紧凑流取代,在页面内容保持逐字节一致的同时缩小导出的文档
UseXRefStream
版本 2.296.0
新增
- 流式直接写入器新增可选的 AutoSplitRows 模式:超过工作表行数上限(1048576)的行会结束当前工作表,并继续写入新创建的 <name>_2 、 <name>_3 …工作表,因此无界导出永远不会产生非法的行索引
AutoSplitRows<name>_2<name>_3 FillTableCalculatedColumn工作表上的 FillTableCalculatedColumn 会把表格列的计算列公式推送到每个数据行,按 Excel 自身创作方式逐单元格进行行级转换,然后自然重算
版本 2.295.0
更改
- XLSX HTML 导出集中处理单元格样式:完全相同的样式组合在样式表中仅作为 td.cN 类发出一次,而不是在每个单元格上重复输出内联的 style 属性,从而缩小统一样式表格的 HTML 输出;条件格式的可视化叠加仍保持内联,以保留其逐单元格的特性
td.cNstyle
版本 2.294.0
修复
- 当前行形式的结构化引用( Table[@Col] )现在会在重算期间针对公式单元格自身的行进行求值,串行与并行求值路径均如此;此前每个此类公式都会读取该列的第 1 行——通常是表头文本——当该行包含文本时,重算会直接因类型转换错误而失败
Table[@Col]
版本 2.293.0
更改
- 可选的 RecalcAggregateCache 备忘录现在也覆盖无条件单区域聚合——针对一个普通单工作表区域的 SUM 、 AVERAGE 、 MIN 、 MAX 、 COUNT 与 COUNTA ——因此对同一数据块重复计算的合计会在与条件系列相同的引用稳定性门控下复用第一遍的结果
RecalcAggregateCacheSUMAVERAGEMINMAXCOUNTCOUNTA
版本 2.292.0
新增
- 工作簿转代码生成器( TXLSCodeGen ):遍历工作簿并生成用于重建它的源码语句——工作表创建、单元格值、公式、数字格式、列宽与合并区域——支持 Delphi 或 C++Builder 方言,使手工制作的文件成为现成的 API 示例
TXLSCodeGen - 列规则导入校验器( TXLSImportCheck ):逐列的必要性、文本长度、正则模式与唯一性规则,外加针对工作表数据行运行的回调;违规项可以用红色字体与原因注释标注回去, KeepOnlyViolations 可将工作表压缩为仅表头加失败行,用于生成“请修正并返回”的工作簿
TXLSImportCheckKeepOnlyViolations
版本 2.291.0
新增
- CSV 导入接受选项记录: OpenCSV 重载在分隔符与类型检测开关之外,还支持跳过前导行( SkipRows ,用于网格上方的标题横幅)与空白修剪( AutoTrim )
OpenCSVSkipRowsAutoTrim FillMergedCellValues工作表上的 FillMergedCellValues 会把每个合并区域的锚定值复制到其覆盖的每个成员单元格,使带有合并标签的报表式工作表可作为一个扁平网格读取AddListValidationAddListValidation 新增字符串数组重载,可一次调用将各项目合并为一个下拉列表- 数据集导出( TDataToXLS )新增斑马纹( AlternatingColor ,绘制在奇数明细行上)与总计行( SummaryRow ),后者会为导出的数值字段或调用方指定的字段列表追加真正的 SUM 公式,并带有一个加粗的标题单元格
TDataToXLSAlternatingColorSummaryRowSUM
修复
- 数据集导出现在会把配置的 DetailColor 背景应用到明细单元格;此前该属性虽被接受但从未绘制
DetailColor
版本 2.290.0
更改
- 可选的 RecalcLookupCache 备忘录现在也覆盖 VLOOKUP 的精确与近似扫描、 HLOOKUP ,以及 MATCH 的匹配类型 0 和 1,因此对同一区域重复进行这些经典查找的工作簿,会在与 XLOOKUP / XMATCH 相同的引用稳定性安全门控下,于重算过程中复用首次扫描的结果
RecalcLookupCacheVLOOKUPHLOOKUPMATCHXLOOKUPXMATCH
版本 2.289.0
新增
- 流式直接写入器新增可选的 TrackColumnWidths 模式:在行流式写入时,工作表会在内存中暂存,使保存的文件携带 <dimension> 已用区域提示以及按所见最长显示文本(字符加内边距,上限 255)设置的各列宽度,为数据仅在流式写入过程中才可知的导出近似实现自动调整列宽;显式设置的列宽始终优先
TrackColumnWidths<dimension>
版本 2.288.0
新增
- 打开 XLSX 包时现在容忍非规范命名空间前缀:将元素绑定到不同前缀(或 ISO 29500 strict)命名空间的工作表、图表、绘图与文档属性部件,会在解析时归一化到标准词汇表,因此来自第三方生成器与严格模式保存器的文件都能正确加载
- 单元格省略 r 位置属性的工作表会将每个单元格放在其前驱之后(按扫描顺序),没有 r 属性的行则延续行序列——这是多个流式写入器采用的约定
rr
版本 2.287.0
新增
OpenOpen 现在可读取 Excel 2.0/3.0/4.0 工作簿(BIFF2-4):不带 OLE 包装的原始 BIFF 流可加载其数字、文本、布尔值、错误与公式缓存结果;公式的字符串结果通过 BIFF2-4 String 记录传入,流的代码页记录则驱动文本解码
更改
- BIFF2-4 文档仅读取数值——那些世代的数字格式与样式未建模,因此日期以原始序列号呈现,公式以其最后计算出的值呈现
版本 2.286.0
新增
- 带比较区段的数字格式( [>=100] 、 [<0] 、…)会在所有显示文本渲染处按值选择区段,与 Excel 的条件格式行为一致
[>=100][<0] - 数字格式文本区段( "ID:"@ )会对字符串值套用模板,而不是忽略该格式
"ID:"@ SetCellFromHtmlSetCellFromHtml 用轻量 HTML 片段填充单元格: <b> / <strong> 、 <i> / <em> 、 <u> 、 <br> 与 <font color=...> 会转换为富文本 run;其他标签会被丢弃但保留其文本<b><strong><i><em><u><br><font color=...>- TaggedText 标记接受 <br> 换行、 <strong> / <em> 别名、 <font color=...> 属性形式,以及 " / 实体
TaggedText<br><strong><em><font color=...>" - 列保持在一起块( KeepColumnsTogether )会在列组内阻止垂直分页,与行级功能在分页、预览与 PDF 输出中保持一致
KeepColumnsTogether - 经典的 Spinner 与 ScrollBar 表单控件可通过 Min/Max/Inc/Page 设置与链接单元格写入 XLS 文件,通过 OBJ FtSbs 子记录发出
WriteAutoValueWriteAutoValue 在 ISO 形式之外还识别 m/d/yyyy 与 d.m.yyyy 日期及可选时间(含 AM/PM),并拒绝不可能的日历日期m/d/yyyyd.m.yyyyConvertFormulasToValuesConvertFormulasToValues 新增 OnlyExternal 模式,仅冻结引用其他工作簿的公式,且经典 XLS 门面新增整表方法OnlyExternal- 行自动调整会按合并后的列宽度量合并单元格,并在合并行之间分配所需高度
版本 2.285.0
新增
- PDF 导出以原生矢量图形绘制工作表图表:簇状、堆积与百分比堆积柱形图与条形图、带标记的折线图、面积图、带百分比标签的饼图与环形图、散点图与雷达图——每张图均带标题框架、自动缩放坐标轴、刻度标签、网格线、图例、可选逐点数据标签、逐系列纯色填充与 Excel 默认强调色板;3D 图表类型以其 2D 投影渲染
- 锚定在最后一个单元格之外的图表现在会扩展打印表面,因此位于数据行下方的图表仍会出现在 PDF 与预览输出中,而不会被裁剪掉
版本 2.284.0
新增
- PDF 页眉与页脚会渲染 Excel 的样式代码: &B 加粗、 &I 斜体、 &U / &E 单/双下划线、 &S 删除线、 &X / &Y 上/下标、 &nn 字号、 &K 颜色,以及 &"Font,Style" 字重关键字
&B&I&U&E&S&X&Y&nn&K&"Font,Style" - PDF 导出通过将填充、字体、边框、数据条与图标压平为亮度灰度,遵守工作表的黑白打印模式
- 当工作表请求时,打印的行与列标题(行号与列字母)会渲染在网格旁边
- 打印居中: CenterHorizontally / CenterVertically 会在页边距之间平移打印网格,而页眉与页脚带保持原位
CenterHorizontallyCenterVertically - 单元格批注既可打印为红色角标指示(按显示模式),也可通过新的 PrintCommentsAtEnd 工作表属性在工作表之后打印为批注列表页,该属性可往返 Excel 的 cellComments="atEnd" 页面设置值
PrintCommentsAtEndcellComments="atEnd" - 内部超链接( Sheet!Cell 目标)成为可点击的文档内 GoTo 链接,可跳转到目标工作表的页面
Sheet!Cell - 导出器公开查看器 PageLayout 偏好,并在文档信息字典旁写入 XMP 元数据包
PageLayout - TrueType 集合( .ttc )字体可作为内嵌 Unicode 字体;当仅存在常规字面时,会合成内嵌字面的粗体与斜体字型
.ttc
更改
- 列宽改用 Excel 的最大数字宽度公式(Calibri 11 度量)进行换算,而非固定的逐字符估算,因此 PDF 与预览宽度与 Excel 存储的像素宽度一致
- 换行行从每行自身的第一个字符重新度量,修复了忽略被前一个断行下移单词宽度的换行行
版本 2.283.0
新增
- PDF 导出以真正的单词断行处理 WrapText 单元格,包括逐行水平对齐、垂直块对齐以及两端对齐或分散对齐的间距
WrapText - PDF 导出通过 PDF 文本矩阵渲染旋转的单元格文本,包括垂直堆叠文本,并通过逐步降低字号直到值可容纳来遵守 ShrinkToFit
ShrinkToFit - 溢出单元格的 PDF 文本现在会延伸穿过相邻空单元格,并在第一个被占用的单元格处裁剪,与 Excel 打印行为一致;常规对齐会像 Excel 一样右对齐数字
- PDF 导出以逐 run 的字体样式、字号、颜色、下划线、删除线、上标与下标绘制富文本 run;换行行保留逐 run 的样式
- PDF 导出可绘制斜向单元格边框与真正的双线边框
- 跨越合并单元格的文本现在会在整个合并矩形内绘制、对齐、换行并锚定超链接,且被覆盖的合并成员不再绘制自己的背景
更改
- PDF 文本宽度来自校准的逐字符推进表,而非固定的平均字符宽度,因此对齐、换行与缩小都与打印页一致
- 单元格缩进会像 Excel 一样移动文本,图标集单元格会将其值缩进显示在图标旁
版本 2.282.0
新增
- PDF 导出保留 PNG 透明度:带 alpha 通道的图像现在会发出软掩膜平面而不是丢失透明度,包括带 tRNS 块的调色板图像
更改
- PDF 页面内容流现在使用 Flate 压缩,在不要求查看器超出 PDF 1.4 的情况下显著缩小导出的文档
- PDF 导出会将连续的文本操作批处理为共享文本块,并跳过冗余的字体、字号与颜色选择,同时减小输出体积与生成时间
- 具有相同纯色填充的相邻单元格渲染为一个合并矩形,共线且样式相同的边框段作为单次描边而非逐单元格边缘
- PNG 图像在不解码与重新编码的情况下直接嵌入 PDF,保留原始压缩流与精确像素
- 字节内容完全相同的图像只嵌入一次并共享,无论多少个图像对象引用它们
修复
- 现在也会为文本通过内嵌 Unicode 字体路径渲染的链接单元格创建超链接注释
- PDF 内容字节不再依赖活动系统代码页,因此西文文本在任何 Windows 区域设置下都渲染一致
版本 2.281.0
修复
- 剪贴板读取器不再将数据句柄截断为 32 位,此前这导致 XLSGetClipboardBiff8 与 XML 电子表格粘贴路径在 64 位应用程序中返回空
XLSGetClipboardBiff8 - 当其他应用程序持有剪贴板时,剪贴板操作会在半秒内重试打开,而不是在首次争用时就失败
更改
- 条件格式规则查找( FindAt / IndexOfCell 路径)对每条规则的单元格区域只解析一次,而不是在每个被查询的单元格上解析,与数据验证缓存一致
FindAtIndexOfCell - PDF 导出会构建逐工作表的超链接索引,用二分查找取代逐单元格的线性扫描
版本 2.280.0
新增
- 用户定义函数可按名称注册: RegisterUserFunction 会把调用该名称的公式直接分派到其处理器(无需在单个 OnUserFunction 中使用全局 if 链),未注册的名称仍由工作簿事件提供服务
RegisterUserFunctionOnUserFunction ScanUnknownFunctionsScanUnknownFunctions 审计工作簿中计算引擎无法求值的公式函数,报告每个单元格与名称 — 在对外部文件启用重算之前尤为理想RecoveryModeRecoveryMode :结构损坏的工作表部件会被跳过并附带警告诊断,而不是中止整个打开过程- 原生 BIFF8 剪贴板格式: XLSSetClipboardBiff8 / XLSGetClipboardBiff8 发布并读取 Excel 自身使用的 Biff8 流,因此剪贴板交换会保留值、公式与格式
XLSSetClipboardBiff8XLSGetClipboardBiff8Biff8
更改
- 数据验证审计对每条规则的单元格区域只解析一次,而不是在每个单元格上解析,从而加快大型工作表上的 CheckDataValidations
CheckDataValidations
版本 2.279.0
新增
- PDF 导出内嵌工作表图像:PNG/GIF/BMP 位图会转换为 Flate 压缩的 RGB XObject,JPEG 文件通过 DCTDecode 原样透传(不重新压缩);多页上的相同图像共享一个对象,未显式指定大小的图像现在默认采用 96 DPI 下的像素尺寸
- 保持在一起块: KeepRowsTogether 阻止打印/PDF 分页在可放入一页的行块内部断开, XlsxAutoPageBreaks 将自然的(保持感知的)页面边界转换为显式行分页,使 Excel 像导出那样分页
KeepRowsTogetherXlsxAutoPageBreaks - 可配置的 XLSX 压缩: ZipCompressionLevel 为保存选择 deflate 级别(默认为 -1,最大为 9)
ZipCompressionLevel - 可复现的保存: DeterministicOutput 固定 zip 条目时间戳,使相同工作簿两次保存产生逐字节相同的文件
DeterministicOutput
修复
- 具有循环 FAT 链的损坏复合文件不再挂起经典 .xls 加载器——目录与流链遍历带有循环保护
版本 2.278.0
新增
- PDF 导出为工作表超链接发出可点击的链接注释:携带 URL 的单元格会获得一个覆盖单元格区域的不可见 /Link 矩形,并带有 URI 操作
- PDF 导出写入文档大纲(书签):每个导出的工作表都成为一个指向其首个渲染页面的书签
版本 2.277.0
新增
- 数据验证新增审计 API: CheckDataValidations 会对照工作表的规则(列表成员资格、整数/小数/日期/时间边界、文本长度、通过计算器处理的自定义公式)扫描已填充的单元格,并报告每个违规单元格及其规则索引和原因
CheckDataValidations - 类型化的自定义文档属性通过 docProps/custom.xml 往返: Workbook.CustomProperties 上的文本、数字、日期和布尔条目
docProps/custom.xmlWorkbook.CustomProperties - 自定义 XML 数据部件通过 Workbook.CustomXmlParts 往返,并带有工作簿级关系与内容类型
Workbook.CustomXmlParts - 图像现在接受 SVG 伴生文件: AddImagePair 将 SVG 字节存储在栅格回退图像旁边,写入 svgBlip 扩展以及 Excel 2016 及更高版本所需的额外媒体部件
AddImagePairsvgBlip - 图表现在可以通过 DataLabelsRange 从单元格区域获取数据标签文本(“Value From Cells”),以图表扩展形式写出并在打开时恢复
DataLabelsRange - 自定义表样式: Workbook.CustomTableStyles 定义带有彩色/加粗分区的命名样式(标题行、汇总行、条纹、边缘列),写入 tableStyles 并带有各自的差异样式,使表格可以按名称引用它们
Workbook.CustomTableStylestableStyles
版本 2.276.0
新增
- 单元格渐变填充:按角度线性扫过的渐变和带逐色标颜色的路径渐变通过 gradientFill 往返,在 HTML 导出中呈现为 CSS 渐变,在 PDF 导出和工作簿查看器中呈现为波段插值填充,并可通过 TXLSXFills.AddLinearGradient 便捷方法使用
gradientFillTXLSXFills.AddLinearGradient - 经过时间数字格式( [h]:mm:ss 、 [mm]:ss 、 [s] )现在在所有显示路径(FormattedText、HTML、PDF、条件格式值)中都呈现累计总数,而不再像时钟一样回绕
[h]:mm:ss[mm]:ss[s] - 分数数字格式( # ?/? 、 # ??/?? 、固定分母如 0/8 )使用 Excel 的最佳有理近似值呈现,包括隐藏整数零和对齐间距
# ?/?# ??/??0/8 [Red][Red] 式颜色括号现在通过 TXLSXCell.GetFormattedTextColor 呈现,并在 PDF 导出中重新绘制单元格文本颜色TXLSXCell.GetFormattedTextColorTXLSXWorkbook.ValidateNumberFormatTXLSXWorkbook.ValidateNumberFormat 以与 Excel 的自定义格式对话框相同的方式检查自定义格式字符串 — 分区数量、引号配平以及括号内容(颜色、条件、经过时间单位、区域设置指令)- 冻结窗格状态可以通过 GetFrozenPanes 读回,右下窗格的滚动位置通过 SetPaneScroll / GetPaneScroll 往返(写入为 topLeftCell )
GetFrozenPanesSetPaneScrollGetPaneScrolltopLeftCell - 行/列标题显示开关 DisplayRowColHeaders 通过 showRowColHeaders 往返
DisplayRowColHeadersshowRowColHeaders - 图表公开 DispBlanksAs (gap / span / zero)和 PlotVisibleOnly ,而不再硬编码这些值,并在打开时从保留的 ChartML 中恢复两者
DispBlanksAsPlotVisibleOnly - 批注带有可编辑的框几何信息( WidthPt / HeightPt ,VML 点)以及由文本驱动的 AutoSizeFromText 启发式逻辑
WidthPtHeightPtAutoSizeFromText
版本 2.275.0
新增
- 查找和替换现在理解 Excel 通配符: * (任意连续字符)、 ? (恰好一个字符)以及作为字面 * 、 ? 或 ~ 转义符的 ~ — 与 Excel 本身在查找和替换、 COUNTIF 系列条件以及自动筛选器中应用的语义相同
*?~*?~COUNTIF - XLSX 工作表的 FindText 新增带选项的重载:区分大小写、匹配整个单元格内容、同时搜索公式文本与值、通配符模式以及反向扫描,并带有起始锚点,使重复调用可以逐个遍历匹配项
FindText ReplaceTextReplaceText 新增相同的选项集,外加可选的逐匹配回调,可逐个单元格接受、重写、跳过或中止每次替换- 经典 XLS 工作表的 FindText / ReplaceText 新增通配符和整单元格重载,使两种外观都共享 Excel 搜索语义
FindTextReplaceText GetRangeStatisticsGetRangeStatistics 扫描一个矩形区域,在一次遍历中报告最小值、最大值、总和、平均值、数值数量以及已填充单元格数量WriteAutoValueWriteAutoValue 以与 Excel 自身单元格录入相同的解释方式写入文本: TRUE / FALSE 变为布尔值, #N/A 等错误字面量变为错误值,无歧义的 ISO 日期变为日期,普通不变格式的数字变为数字,而其他一切内容 — 包括前导零和千位分隔符 — 保持为文本(两种外观均适用)TRUEFALSE#N/AGetHtmlFromCellGetHtmlFromCell 将单个单元格呈现为带样式的 HTML 片段并转义标记,作为整表 HTML 导出的补充SortRangeSortRange 接受不区分大小写的标志,使文本键无论大小写都按字母顺序排序(XLSX 外观)
版本 2.274.0
新增
- Excel 表格现在通过新的 HasHeaderRow 和 Comment 表属性往返无标题行表格和逐表批注,分别写入为 headerRowCount="0" 和 comment 属性
HasHeaderRowCommentheaderRowCount="0"comment - 图表可以通过新的 ChartStyle 属性(1–48 或扩展的 101–148 范围)选择 Excel 库样式,通过图表部件的样式元素往返
ChartStyle - 组合图表可以通过每个绘图组上新的 ZOrder 属性控制绘图区域分层,使柱形系列可以渲染在折线系列之后或之前
ZOrder - 工作表和单个单元格可以通过 ConvertFormulasToValues 和 ConvertFormulaToValue 将公式冻结为其计算值,在保留缓存结果的同时丢弃公式、共享公式链接和数组元数据
ConvertFormulasToValuesConvertFormulaToValue - 已定义名称现在通过新的 Comment 名称属性携带可选的批注,通过经典名称批注记录和 XLSX 已定义名称的 comment 属性往返
Commentcomment - PDF 导出通过新的 PaperWidth 和 PaperHeight 属性接受以点为单位自定义纸张尺寸,覆盖每个渲染工作表的纸张大小枚举
PaperWidthPaperHeight - PDF 导出可以通过新的 HidePrintObjects 集合隐藏页眉或页脚区域
HidePrintObjects - PDF 页眉和页脚字段代码 &F (文件名)和 &Z (路径)现在会使用基于文件的导出捕获的源工作簿路径进行展开
&F&Z - 数据条通过新的 NegativeBorderColor 和 NegativeBarBorderColorSameAsPositive 设置支持独立的负值边框颜色,写入 Excel 2010 及更高版本的数据条扩展中
NegativeBorderColorNegativeBarBorderColorSameAsPositive - 标识符没有旧版记录槽的内置单元格样式(Hyperlink、Title、Headings、Accents、Good/Bad/Neutral、…)现在会在保存时解析其规范显示名称,使 Excel 样式库在往返后依然保留
- Agile 加密工作簿现在携带真正的 dataIntegrity 块:写入器对整个加密包发出符合规范的 HMAC,打开时会加以验证,检测错误密码或被篡改的包;来自没有该块的写入器的文件仍可按原样打开
dataIntegrity - 经典工作簿通过 SetModifyPassword 支持 Excel 的 “修改密码”写入保留(建议只读标志、旧版密码哈希以及作为 WRITEPROT + FILESHARING 记录对写出的保留用户名); IsWriteReserved 报告该状态,空密码可清除它
SetModifyPasswordIsWriteReserved - 可选的 RecalcLookupCache 备忘录加速查找密集型重算:对同一区域重复的 XLOOKUP / XMATCH 扫描会复用第一次扫描的结果。该备忘录仅在依赖图可证明引用稳定时(没有 OFFSET / INDIRECT 或无法解析的引用、没有循环链、没有 What-If 数据表)才启用,否则保持静默关闭,因此结果始终一致
RecalcLookupCacheXLOOKUPXMATCHOFFSETINDIRECT - 配套的 RecalcAggregateCache 备忘录加速条件聚合重算:对同一区域和条件的重复 SUMIF / COUNTIF / AVERAGEIF 扫描会复用第一次的结果,同样受引用稳定性门槛约束且结果一致
RecalcAggregateCacheSUMIFCOUNTIFAVERAGEIF LAMBDALAMBDA 表达式以完整闭包求值:RefersTo 为 LAMBDA 的已定义名称可以按名称带参数调用( =MyFunc(5) ),闭包在 LET 内部按词法绑定( =LET(f, LAMBDA(x, x*2), f(21)) ),参数会遮蔽同名的列引用,公式文本原样往返;存储为单元格结果的裸 LAMBDA 保持跳过无值的行为LAMBDA=MyFunc(5)LET=LET(f, LAMBDA(x, x*2), f(21))LAMBDALETLET 现在拥有完整的语义:每个绑定对后续绑定和主体表达式都可见,包括嵌套的 LET 组合 — 取代了此前的部分实现LET- 公式文本现在除了经典分号外还接受逗号作为参数分隔符,与 Excel 对粘贴和导入公式的规范语法一致
- 公式中的结构化引用现在可以求值: Table[Column] 、 Table[[Column]] 、列跨度以及 [#Data] / [#All] / [#Headers] / [#Totals] 项形式会在解析时对照工作簿的 Excel 表格解析,因此 =SUM(Table1[Amount]) 可以计算,同时原始公式文本仍原样往返;无法解析的引用保持此前的跳过无值行为,当前行形式( [@Column] )仍不受支持
Table[Column]Table[[Column]][#Data][#All][#Headers][#Totals]=SUM(Table1[Amount])[@Column]
更改
- 当工作簿禁用完全精度时,重算结果现在会按每个单元格数字格式显示的小数位数进行舍入存储,与 Excel 对 HotXLS 计算的值的 “按显示精度计算”行为一致
- 写入 XLSX 的条件格式规则现在会获得工作表内唯一的优先级,消除了导致 Excel 提示修复的重复优先级文件
- 通过新的 IsPivot 属性标记为透视表作用域的条件格式会被路由到扩展桶,而不是工作表的条件格式主块,否则 Excel 会丢弃或放错它们
IsPivot
版本 2.273.0
更改
TXLSXWorkbook.PreserveRawPartsTXLSXWorkbook.PreserveRawParts 现在会以其原始压缩负载复制未更改的工作表图像、页眉和页脚图像以及图表部件,而图像数据编辑和图表模型编辑则走序列化路径- 成功的文件 SaveAs 现在会把已提交的包作为下一次原始复制基线,使后续保存能够复用新序列化的不透明数据、VBA、连接、外部链接、图像、图表、主题和透视负载,而无需重新打开之前的源包
修复
- 来自部件位置非标准包中的未知工作表和绘图关系现在会基于其生成的规范所有者重新定位,包括其唯一锚点为保留的不受支持形状的纯绘图包
- 失败的压缩成员复制现在会在安全序列化回退之前回滚其部分本地头、负载字节、父文件夹条目和中央目录计数,防止不可达数据在输出归档中累积
版本 2.272.0
更改
- XLSX SaveAs 现在为整个保存操作打开一个经过验证的源归档,并以原始压缩负载复制每个未更改的、可通过关系到达的不透明部件,避免了重复的中央目录扫描以及解压和重新压缩,而修改过的负载仍走序列化路径
修复
- 来自工作簿使用非标准部件名的包中的未知工作簿关系现在会基于生成的工作簿位置重新定位,防止其保留的目标部件在 SaveAs 后变得不可达
- 投影式直接读取现在会保留选定行或列集合之外的共享公式主定义,使选定的从属单元格仍然获得正确转换的公式,而无需重建未选定的值或富文本
- 编辑图表不再仅仅因为数据标签数字格式编写使用同名元素就去掉未建模的坐标轴数字格式
版本 2.271.0
修复
- 经典 HTML 导出器现在以 UTF-8 写入,并通过 <meta charset> 加上 HTML5 doctype 声明它;此前流以系统 ANSI 代码页写入,会损坏任何非 ASCII 单元格值,而缺少字符集声明则使页面完全取决于浏览器
<meta charset>
版本 2.270.0
新增
- 图表数据标签现在可以通过新的 LabelNumFmt 和 LabelPos 系列属性(连同它们的 *Set 标志)携带显式的数字格式和位置,在标准和组合图表写入器中写为 <c:numFmt> 和 <c:dLblPos> — 支持百分比或货币标签文本以及诸如 outside-end 或 center 之类的标签位置;单独设置任一选项也会启用标签块,未设置的系列保持字节一致
LabelNumFmtLabelPos*Set<c:numFmt><c:dLblPos>
版本 2.269.0
新增
- 折线图和散点图系列现在可以通过新的 MarkerSymbol 、 MarkerSize 和 MarkerSet 属性携带显式的标记符号和大小,在标准和组合图表写入器中写为系列的 <c:marker> 块;未设置的系列保留自动标记
MarkerSymbolMarkerSizeMarkerSet<c:marker> - 带显示单位的值轴现在可以通过新的 ShowDispUnitsLabel 轴属性显示单位标签(“Thousands”、“Millions”、…)
ShowDispUnitsLabel
版本 2.268.0
新增
- XLSX 图表趋势线现在通过新的 Intercept / InterceptSet 、 Forward 和 Backward 属性支持固定截距以及向前和向后的预测周期,写为 <c:intercept> / <c:forward> / <c:backward> ;此前只有经典 BIFF 图表构建器提供这些控件,未设置的趋势线保持字节一致
InterceptInterceptSetForwardBackward<c:intercept><c:forward><c:backward>
版本 2.267.0
新增
- 公式计算现在可以求值复数函数 IMCOS 、 IMSIN 、 IMTAN 、 IMSEC 、 IMCSC 、 IMCOT 、 IMLOG2 和 IMLOG10 ,以三角、倒数以及以 2/以 10 为底的对数覆盖复数字符串操作数,补全 IM* 工程函数族
IMCOSIMSINIMTANIMSECIMCSCIMCOTIMLOG2IMLOG10IM*
版本 2.266.0
更改
- 流式直接读取器现在会在累积单元格值之前应用列投影:当配置了投影列集合时,集合之外的单元格会跳过此前每个单元格都执行并在单元格结束时丢弃的值、公式和富文本字符串构建,从而加快只投影少数几列的宽表读取
版本 2.265.0
新增
- 条形图和柱形图绘图组现在通过新的 BarGrouping 、 GapWidth 和 Overlap 属性公开可配置的分组模式( clustered 、 stacked 、 percentStacked )、簇间距宽度和系列重叠;此前每个条形/柱形图都硬编码为 clustered 且无法控制间距或重叠,未设置的组保持字节一致,而打开后编辑的合并列表将新元素视为自有
clusteredstackedpercentStackedBarGroupingGapWidthOverlapclustered
版本 2.264.0
修复
- PDF 单元格边框现在反映工作表的边框样式和粗细,而不再让每个边框都绘制成相同的 0.75 pt 实线:XLSX 单元格渲染细、中、粗、发丝和双线粗细以及虚线、点线、点划线、双点划线和斜点划线图案,BIFF 单元格渲染细、中和虚线/点线样式
版本 2.263.0
新增
- PDF 导出现在可以通过新的 DocumentTitle 、 DocumentAuthor 、 DocumentSubject 和 DocumentKeywords 属性嵌入文档元数据;当设置任一属性时,PDF 会携带包含这些字段的 /Info 字典,外加 Creator / Producer 标识和 CreationDate ,而没有元数据的默认导出保持字节一致
DocumentTitleDocumentAuthorDocumentSubjectDocumentKeywords/InfoCreatorProducerCreationDate
版本 2.262.0
修复
- CSV 导出不再过度引用字段:内部空格不再强制加引号,因此 John Smith 之类的值以不带引号的方式写出,与 RFC 4180 和 Excel 一致;包含分隔符、双引号、换行符或前导/尾随空白的字段仍按之前的方式加引号
John Smith
版本 2.261.0
新增
- 每个图表系列现在可以通过新的 SolidFillHex 属性携带纯色填充颜色,写为系列的 <c:spPr> 形状属性;分配十六进制颜色会用品牌或调色板颜色标记该系列,而不再使用 Excel 的自动主题颜色,未设置的系列保持字节一致,打开后编辑的合并列表将 spPr 视为自有,从而替换而非重复
SolidFillHex<c:spPr>spPr
版本 2.260.0
更改
- 稀疏单元格存储后端现在以几何方式(倍增)扩展每个 256 行块缓冲区,而不再在每次追加单元格时重新分配,消除了加载密集工作表时的二次复制成本
版本 2.259.0
修复
- BIFF8 工作表对象保护( OBJECTPROTECT )和方案保护( SCENARIOPROTECT )记录现在会被读回工作表保护状态,使锁定标志在往返后得以保留,而不再是被写出却在重新加载时丢失
OBJECTPROTECTSCENARIOPROTECT - BIFF8 工作簿全局 MMS 、 RefreshAll 和 UseSelFS 记录现在在往返后得以保留,而不再被静默丢弃
MMSRefreshAllUseSelFS
版本 2.258.0
新增
- 格式化显示文本现在识别 [Cyan] 和 [Magenta] 颜色指令以及从 [Color1] 到 [Color8] 的索引调色板指令,使 HTML 式格式化输出应用这些颜色而不再丢弃它们
[Cyan][Magenta][Color1][Color8]
版本 2.257.0
新增
- 公式计算现在可以求值工程和数学函数 FACTDOUBLE 、 SQRTPI 、 DELTA 、 GESTEP 、 SERIESSUM 和 CONVERT ,其中 CONVERT 覆盖质量、距离、时间、压力、力、能量、功率、磁、温度和体积单位,并拒绝不匹配的单位类别
FACTDOUBLESQRTPIDELTAGESTEPSERIESSUMCONVERTCONVERT
版本 2.256.0
修复
- 格式化显示文本现在在 hh:mm 、 mm:ss 和 [h]:mm:ss 等时间掩码中正确渲染分钟;此前使用了 Delphi 的 mm (月),导致分钟字段显示月份数字
hh:mmmm:ss[h]:mm:ssmm - [$-409] 和 [$$-1009] 等区域设置和货币指令现在会从格式化输出中剥离,而不再作为字面 $-409 前缀泄漏,同时指令中存在的货币符号会被保留
[$-409][$$-1009]$-409
版本 2.255.0
新增
- ZIP 包读取现在理解 ZIP64 归档,解析扩展信息额外字段以及 ZIP64 中央目录结束记录和定位器,使部件或偏移超过 4 GB / 65535 条目经典限制的工作簿可以正确打开,而不再因中央目录结束完整性检查失败而报错
版本 2.254.0
安全
- 加密工作簿的密码验证现在对 Agile 和 Standard 加密都以恒定时间比较验证器哈希,堵住了可能泄露密码哈希前多少个字节匹配的时序侧信道
- 当系统 CSPRNG 不可用时,Agile 加密不再回退到以时间作为种子的伪随机生成器来生成盐、验证器和中间密钥;它现在在失败时安全关闭,而不再发出可预测的密钥材料
版本 2.253.0
新增
- 公式计算现在会求值 Excel 365 数组整形函数 VSTACK 、 HSTACK 、 TOROW 、 TOCOL 、 WRAPROWS 、 WRAPCOLS 、 TAKE 、 DROP 、 CHOOSECOLS 、 CHOOSEROWS 、 EXPAND 、 RANDARRAY 与 TEXTSPLIT ,通过现有动态数组机制溢出其结果
VSTACKHSTACKTOROWTOCOLWRAPROWSWRAPCOLSTAKEDROPCHOOSECOLSCHOOSEROWSEXPANDRANDARRAYTEXTSPLIT - 公式计算现在会求值现代文本函数 TEXTBEFORE 与 TEXTAFTER ,支持实例编号、不区分大小写、匹配到末尾以及未找到处理
TEXTBEFORETEXTAFTER - 公式计算现在会求值 RANDBETWEEN 、 ISEVEN 、 ISODD 以及 FORECAST 的 FORECAST.LINEAR 别名
RANDBETWEENISEVENISODDFORECAST.LINEARFORECAST
版本 2.252.0
新增
- 已定义名称携带可选的批注,以 BIFF8 NAMECMT 记录和 OOXML definedName 的 comment 属性往返
definedNamecomment - 本地文件超链接目标会被规范化(反斜杠转正斜杠、 file:// 与 file:/// 前缀、保留字符的百分号编码),因此 Excel 会原样存储它们
file://file:/// - 形状、图片与文本框的填充类型(纯色、图片、渐变、无、自动)现在在原始填充类型属性之上类型化,并忠实往返
- 条件格式数据条支持 Excel 2010+ 独立的负值条边框颜色
- 透视缓存字段往返多级日期与数值分组关联
- 用户函数回调接收参数类型描述符,使处理程序能够区分字面值、单元格或区域引用以及数组常量
- 公式编译接受本地化函数名称(德语、法语、西班牙语),在词法分析前改写为规范英文
- 密码与加密辅助工具公开命名的返回码常量
更改
- 包与 XLSX 保存现在流经更大的 deflate 缓冲区与更高的压缩内存级别,并跳过对已压缩字节的冗余校验和检查,从而降低保存的 CPU 与墙钟时间
- 内部字符串构建器、列表与哈希表扩容现在使用几何(倍增)分配,并配合更早的哈希重哈希点,在工作簿携带大量样式、名称、已定义区域或共享字符串时降低分配抖动与查找成本
- 共享字符串表查找现在在物化完整字符串之前直接比较存储的字节,从而削减大型共享字符串表上的查找分配
版本 2.251.0
修复
- XLSX 打开与保存现在保留外部工作簿根命名空间声明、标记兼容性属性、完整的工作簿级 <extLst> 负载及其未知关系,同时重新生成类型化工作簿状态;保留的 r:id 引用遵循关系 ID 重新分配,而不是在与生成的工作表或工作簿关系冲突时变得陈旧
<extLst>r:id
版本 2.250.0
更改
- XLSX 稀疏行条目现在只存储其列与稳定的单元格句柄,消除了未使用的负载标签、冗余分类,以及单元格值、公式或富文本对象变化时的第二次行索引查找
版本 2.249.0
新增
TXLSRTFImport.LoadFromRTFTXLSRTFImport.LoadFromRTF 与 TXLSWorksheet.OpenRTF 重载可以在显式的一基目标行与列导入表或段落列表,而原始重载继续从 A1 开始TXLSWorksheet.OpenRTF
更改
- XLSX 类型化行写入器现在将严格向前批直接追加到预尺寸的稀疏行向量,稀疏单元格查找无需二分搜索即可解析首列与末列命中,而重叠写入保留其现有替换路径与稳定单元格句柄
修复
- 文件支持的 XLSX 原始部件复制与选择性工作表加载现在使用带尺寸与时间戳验证的私有源归档身份,因此后续的流打开或公开的 FileName 赋值无法将保留的部件重定向到另一工作簿
FileName RefreshPivotCacheRefreshPivotCache 现在将已刷新的缓存切换到类型化序列化,使重建的记录不会在保存期间被过期的原始包字节覆盖- 原始压缩 ZIP 复制现在要求源流恰好包含声明的压缩字节数,在中央目录注册之前拒绝被截断与过长的条目
- 重复使用同一个 RTF 导入器现在会在文档之间重置代码页与字符格式解析器状态,使粗体、斜体、下划线、删除线与字号无法泄漏到下一次导入
MetadataOnlyMetadataOnly XLSX 打开现在避免共享字符串、人员、工作表关系、批注、绘图、图表、表、查询表、透视以及可从工作表到达的不透明负载,同时保留工作簿属性、名称、工作表状态、样式、主题、连接与外部链接
版本 2.248.0
更改
- XLSX SaveAs 现在在解析的连接模型未变化时从源包原始复制未更改的 connections.xml 部件,保留源 XML 保真度并避免不必要的解压与重新压缩,同时仍从类型化模型重写已编辑的连接
connections.xml
版本 2.247.0
更改
- XLSX SaveAs 现在在解析的模型未变化时从源包原始复制未更改的外部链接 XML 与关系部件,保留未知扩展 XML 并避免不必要的解压与重新压缩,同时仍从类型化模型重写已编辑的链接
版本 2.246.0
新增
TXLSHTMLImport.LoadFromHTMLTXLSHTMLImport.LoadFromHTML 重载可以在一基目标行与列导入、选择一个零基顶层表或全部表,并在不更改全局格式设置的情况下以显式小数分隔符解析数字
更改
- XLSX 样式加载现在通过共享的不可变 cellXf 数组解析每个单元格样式,而不是重复的字符串键构造与线性映射搜索,从而缩短带样式工作簿的打开时间与临时分配
修复
- 修改过的 VBA 工程字节现在绕过保留的原始部件复制,因此保存已编辑的启用宏工作簿无法恢复原始 vbaProject.bin 负载
vbaProject.bin - 原始 ZIP 成员复制现在拒绝 STORE 与 DEFLATE 之外的压缩方法,而不是发出不匹配的压缩头,使调用方能够使用安全的解压与重写回退路径
- HTML 导入现在忽略顶层表之外的行与单元格标签,并保留原始重载既定的全表行为
版本 2.245.0
新增
- 可编辑的 TXLSWorkbookViewer 单元格,具备感知受保护单元格的输入、公式录入与重算、矩形区域选择、公式引用拾取,以及有界的循环撤销与重做历史
TXLSWorkbookViewer TXLSPivotDesignerTXLSPivotDesigner 提供一个可复用的非可视字段列表模型,包含行、列、筛选与值区域,确定性的字段移动、聚合选择、布局验证与结果应用- 经典 XLS 工作簿现在提供 CalculateAndVerify 诊断,带共享的失配记录,包含工作表身份、一基单元格坐标、缓存值与新计算值以及公式文本
CalculateAndVerify - 经典 XLS 与 XLSX 工作表现在提供类型化的数值、字符串与变体行和列写入器,具备一基坐标、网格边界裁剪、直接单元格模型写入以及返回的写入计数
更改
- XLSX 查看器绘制现在通过避免在重绘与样式解析期间物化空白单元格来保留稀疏工作表
TXLSXWorksheet.ReplaceTextTXLSXWorksheet.ReplaceText 现在以线性时间直接访问存储的单元格,无需复制与排序完整单元格集合
修复
- 经典 XLS RC4 与 RC4 CryptoAPI 读取和写入现在保留 [MS-XLS] 要求的每个明文记录体、保持 BoundSheet8.lbPlyPos 未加密、消费匹配的密钥流位置,并在 FILEPASS 之后读取第一个加密记录前激活解密
[MS-XLS]BoundSheet8.lbPlyPosFILEPASS - SpreadsheetML 序列化现在仅对 Xstring 字段应用对称的 _xHHHH_ 编解码器,而公式与引用语法使用普通 XML 转义,因此令牌形状的字面量保留其确切的公式含义
_xHHHH_
版本 2.244.0
新增
- 多格式剪贴板导入: XLSPasteFromClipboardRich 优先选择 XML 电子表格剪贴板格式(携带公式、样式与合并)而非纯 Unicode 文本,并使用 XLSClipboardHasXmlSpreadsheet 、 XLSGetClipboardXmlSpreadsheet 与 XLSParseXmlSpreadsheet 进行格式检测、提取与 SpreadsheetML 2003 解析
XLSPasteFromClipboardRichXLSClipboardHasXmlSpreadsheetXLSGetClipboardXmlSpreadsheetXLSParseXmlSpreadsheet
版本 2.243.0
新增
- 外部已定义名称: TXLSXExternalLink 现在解析、存储并往返来自外部工作簿链接的 <definedNames> 条目(name + refersTo),并支持 AddDefinedName 、 FindDefinedName 与索引式 DefinedNames[] 访问
TXLSXExternalLink<definedNames>AddDefinedNameFindDefinedNameDefinedNames[] - 逐表刷新失败状态:每个 TXLSXExternalSheetData 携带 RefreshError 标志,记录上次刷新尝试是否失败,从 refreshError 属性解析并发出
TXLSXExternalSheetDataRefreshErrorrefreshError
版本 2.242.0
新增
TXLSXWorkbook.PreserveRawPartsTXLSXWorkbook.PreserveRawParts 在 SaveAs 期间直接从源归档复制未更改部件(主题、VBA 工程、数据透视表与透视缓存)的压缩表示,避免对保留的不透明条目进行解压与重新压缩
版本 2.241.0
新增
TXLSXWorkbook.SelectedSheetsTXLSXWorkbook.SelectedSheets 属性支持选择性工作表加载:Open 仅解析列表中命名的工作表的单元格 XML,而其他工作表保留其名称与可见性状态且零单元格。调用 LoadSheet(Index) 可按需从原始归档物化跳过的工作表LoadSheet(Index)
版本 2.240.0
新增
TXLSXWorkbook.MetadataOnlyTXLSXWorkbook.MetadataOnly 打开模式解析工作簿属性、已定义名称、工作表名称与可见性状态、样式、主题、连接与外部链接,但跳过所有工作表单元格 XML 与卫星部件,以便从大型工作簿快速发现属性与名称
版本 2.239.0
新增
- 紧凑的 256 行块单元格存储,带稳定的公开句柄、行主序的缓存友好序列化,以及每次保存前跨所有工作簿池的样式压缩
- 区间样式覆盖让行、列与矩形格式保持紧凑而无需物化空单元格对象,在单元格访问时惰性解析、在结构编辑后仍存活,并作为紧凑的列、行与仅样式单元格条目往返
更改
- 常规工作簿保存现在将每个工作表行直接流式写入包 deflate 流,因此峰值内存跟随最大的单行而非完整的工作表 XML
- 共享字符串与辅助 XML 部件现在通过单个可复用的 UTF-8 序列化器逐条目流式输出,将峰值内存限制为最大的条目而非整个部件
版本 2.238.0
新增
TXLSPaginationModelTXLSPaginationModel 为 XLS 与 XLSX 区域、工作表与工作簿构建可复用的逻辑页面,带纸张几何、页边距、页眉、页脚、行与列带、重复标题、页面顺序、网格线策略与绘图放置TXLSWorkbookViewerTXLSWorkbookViewer 现在提供共享模型的打印预览、键盘与滚轮页面导航、缓存的 PaginationModel 访问、显式的 RefreshPagination 以及所选页面的 EMF 输出PaginationModelRefreshPaginationTXLSPDFExport.CreatePaginationModelTXLSPDFExport.CreatePaginationModel 公开 PDF 计数与渲染对全部六种 XLS 与 XLSX 输入类型使用的确切自有页面模型
更改
- PDF 导出与页面计数现在使用同一个分页引擎,而不是维护独立的 XLS 与 XLSX 页面循环
- 适合宽度与适合高度缩放现在针对实际页面带求解,包括手动分页与重复标题,处于 Excel 10% 至 400% 的缩放范围内
版本 2.237.0
新增
TXLSFormulaDebuggerTXLSFormulaDebugger 创建一个自有的交互会话,包含解析的表达式树、源跨度、运算符、操作数节点与值、中间结果、确定性求值顺序,以及可导航的当前步骤状态- 公式调试会话公开带已解析工作表坐标的单元格与区域依赖,为 IF 、 IFERROR 、 IFNA 、 CHOOSE 、 IFS 与 SWITCH 报告选中与跳过分支,并保留恢复的内部错误及其来源节点
IFIFERRORIFNACHOOSEIFSSWITCH
更改
- 工作簿与工作表的 Calculate 现在将 Excel 公式失败作为标准 Variant 错误值返回,而不是转换为 Null
CalculateVariantNull TXLSFormulaTracerTXLSFormulaTracer 现在记录推入与归约步骤的精确前后操作数栈
版本 2.236.0
新增
TXLSXWorksheet.StructuralEditRegistryTXLSXWorksheet.StructuralEditRegistry 现在通过 IXLSXStructuralEditParticipant 让应用程序拥有的工作表元数据参与行与列的插入或删除IXLSXStructuralEditParticipant
更改
- XLSX 结构编辑现在在一个受保护的单一事务中完成其引用敏感的工作,覆盖公式、名称、验证、条件格式、批注、超链接、绘图、表、查询、方案、数据表、打印设置、迷你图、透视缓存与视图以及工作表扩展
修复
- 插入或删除的行与列现在更新受保护区域、线程批注锚点、重新打开的经典批注 VML、本地与跨工作表迷你图引用、类型化透视源与锚点、计算的透视公式,以及保留的工作表扩展 XML 中可识别的引用
版本 2.235.0
新增
TXLSDirectWriterTXLSDirectWriter 现在无需构建完整工作簿对象模型即可添加经典批注、锚定的工作表图像、公式支持的柱形、条形、折线、面积、饼图、环形与散点图,以及完整调用方提供的 ChartML- 图像可以以字节、带可选所有权转移的可寻址流或文件路径提供,并可使用 PNG、JPEG、GIF、BMP、EMF 或 WMF 内容
更改
- 丰富的直接写入器部件使用当前工作表的侧信道描述符,在工作表关闭前分配工作表关系标识符,并在工作表 XML 之后流式输出媒体与相关 XML 部件,使行内存与工作表大小无关
版本 2.234.0
新增
TXLSDirectReaderTXLSDirectReader 现在公开可选的维度、工作表格式、列、行、窗格与合并区域事件,带类型化布局记录- 列与行事件报告宽度或高度、隐藏与折叠状态、大纲级别与源样式索引,无需构造工作表单元格对象
更改
- 分配的布局回调在单元格交付前使用有界内存的元数据遍历,确保合并区域与其他布局事实先于依赖它们的单元格到达,而普通的仅单元格扫描保留原有单遍路径
- 并行直接读取将布局回调保持在调用线程上,并在排空有序的工作线程单元格队列前完成所选工作表的元数据
版本 2.233.0
新增
TXLSXChartTextStyleTXLSXChartTextStyle 现在提供类型化的图表标题、图例、坐标轴标题与坐标轴标签字体名称、磅值、RGB 颜色、强调与文本旋转TXLSXChartLayoutTXLSXChartLayout 现在提供规范化的手动绘图区、图表标题、坐标轴标题与图例定位,带显式边缘或因子模式以及内部或外部绘图目标- 图表现在公开类型化的图例可见性、位置、覆盖、文本样式与布局控件,以及图表标题覆盖设置
更改
- 手动布局始终使用 Office 兼容的默认模式序列化完整的 x、y、宽度与高度组,使 Excel 不会丢弃部分或冲突的坐标
修复
- 编辑类型化图表字体或布局会保留无关的扩展列表与自定义命名空间内容,而清除已知的颜色或强调属性在结构合并期间不再恢复导入的值
版本 2.232.0
新增
TXLSXImageTXLSXImage 现在公开基于百分比的裁剪边缘、透明度、亮度、对比度、以度为单位的旋转,以及拉伸或平铺填充模式TXLSXImage.HasPreservedXmlTXLSXImage.HasPreservedXml 报告导入的 DrawingML 是否可用,而 ClearPreservedXml 让一张图片选择干净的键入式模型再生成ClearPreservedXml
更改
- 图像效果值使用紧凑的定点存储,并写入原生 DrawingML 单位,无需为每个效果分配辅助对象
修复
- 编辑导入图像上的受支持属性现在保留无关扩展、标记兼容性选择、自定义属性、形状效果与命名空间限定内容
版本 2.231.0
新增
- 导入的 XLSX 图表在启用 TXLSXWorkbook.PreserveUnsupportedParts 时保留其原始 ChartML,保留未知命名空间、标记兼容性替代、扩展列表、自定义样式与未建模格式
TXLSXWorkbook.PreserveUnsupportedParts TXLSXChart.HasPreservedXmlTXLSXChart.HasPreservedXml 报告原始 ChartML 是否可用,而 ClearPreservedXml 让应用程序选择让一张图表进入干净的键入式模型再生成ClearPreservedXml
更改
- 保存未触碰的导入图表会重放其原始 ChartML,而对受支持属性的编辑仅在结构上叠加已建模的图表节点,并保持无关内容原位
修复
- 编辑图表标题、系列、坐标轴或其他受支持属性不再丢弃图表部件中无关的 Excel 创作扩展、替代内容、样式或格式
版本 2.230.0
新增
TXLSXChart.AddPlotGroupTXLSXChart.AddPlotGroup 现在构建有序组合图表,其图表系列保留独立的主或次坐标轴分配- 图表现在公开主与次类别及数值坐标轴以及系列轴,带类型化的类别、数值、日期与系列轴设置,包括位置、标识符、交叉点、日期单位、标签间隔与可见性
- 柱形、条形、折线、饼图与面积图现在拥有专门的 3D 图表类型,可配置旋转、高度、深度、透视、直角坐标轴与间隙深度
- 系列现在公开名称、类别、数值与气泡大小的类型化字符串与数值缓存,包括稀疏点索引与数字格式代码
更改
- 兼容性的 ChartType 、 AddSeries 与扁平 Series API 继续寻址主绘图组,而图表模型保留每个有序绘图组
ChartTypeAddSeriesSeries
修复
- 打开并重新保存组合图表不再将其折叠为单一图表系列,或丢失次、日期或系列坐标轴
- 图表公式引用与缓存的系列值现在在复制工作簿与打开/保存循环后仍然存在,而不会被扁平化或丢弃
- 图表锚点现在按关系标识符匹配到其图表部件,因此重新排序关系条目的应用程序不再交换工作表位置之间的图表内容
版本 2.229.0
新增
TXLSXWorksheet.HeaderFooterImagesTXLSXWorksheet.HeaderFooterImages 现在会为奇数页、偶数页和首页上每一个左、中、右页眉或页脚位置创建、查找、替换并移除类型化的图像槽- 页眉和页脚图像会公开其原始数据、格式、标题、点尺寸与点边距,并支持直接从 PNG、JPEG、GIF、BMP、EMF 和 WMF 文件加载
更改
- 当编辑页眉或页脚文本时,偶数页和首页图像会自动启用匹配的页面变体,并维护所需的图片域代码
修复
- 当工作表注释与页眉或页脚图像共享同一个工作表时,现在会保留各自的独立 VML 关系
- 由 Excel 创作的页眉和页脚图像槽现在会在打开和保存周期中保留其图像字节、格式、标题、尺寸、边距与关系
版本 2.228.0
新增
- 经典 XLS 工作表与形状集合现在会在复选框、组合框和列表框旁边创建并发现类型化的 TXLSButton 与 TXLSRadioButton 控件
TXLSButtonTXLSRadioButton - 表单控件现在通过类型化属性公开宏名称、链接单元格、输入区域、勾选状态、平面或 3D 外观以及单选组链接
- 已定义名称公开 IsMacro ,使宏绑定保留所需的工作簿名称元数据
IsMacro
修复
- 编辑并重新保存经典表单控件不再丢弃勾选状态、宏绑定、链接单元格公式、源区域或受支持的单选组元数据
- 清除组合框或列表框的源区域现在会移除已序列化的输入公式,而不是在下一次打开时恢复之前的区域
版本 2.227.0
新增
LINESTLINEST 与 LOGEST 现在返回完整的多变量系数数组以及可选的五行统计矩阵LOGESTTRENDTREND 与 GROWTH 现在针对单变量和多变量输入返回成形的预测数组GROWTH
更改
- 数组算术、比较、连接、一元取反与百分数运算现在会广播标量以及单行或单列,同时保留逐单元格结果
- 计算依赖项现在会展开嵌套的工作簿与工作表名称、公式定义的名称以及多区域引用,并带有具备作用域意识的循环保护
修复
- 某一个数组元素中的错误不再会导致完整结果坍塌,也不会错误地回退到标量求值
- 依赖项可以静态解析的公式定义名称不再强制进行不必要的易失性完整重算
版本 2.226.0
新增
- 现有的 XLSX 透视缓存与透视表视图现在通过包关系加载到类型化模型中,包括缓存记录、字段、共享项、分组、筛选器、格式、计算定义与扩展
TXLSPivotTable.MakeTXLSPivotTable.Make 现在以具备依赖项意识的名称绑定方式,计算计算缓存字段、计算项与数据计算成员- 扩展的 ShowDataAs 模式添加了父级百分比、累计百分比以及升序或降序排名,并带有有效的 XLSX 扩展标记
ShowDataAs
更改
- 透视结果生成现在在构建分组域之前会应用项可见性、页选择以及标题、日期、聚合与值筛选器
- 数值、日期与离散分组,标签或数据值排序,已配置的小计,以及可选的具体化总计行或列,现在都参与结果生成
修复
- 透视筛选器现在使用模式有效的根级筛选器标记与符号化筛选器类型,而不是含糊的数值
- 基于关系的加载不再假设约定或顺序的透视缓存、缓存记录或透视表部件名称
版本 2.225.0
新增
TXLSXWorkbook.ConnectionsTXLSXWorkbook.Connections 和 TXLSXWorksheet.QueryTables 现在为外部数据库、Web、文本和查询结果元数据提供类型化的创建与编辑功能TXLSXWorksheet.QueryTables- 连接参数保留其精确的 Boolean、整数、浮点数、字符串或单元格引用类型,包括显式的零、false 和空字符串值
更改
- XLSX 打开和保存现在通过其所属关系解析并写入连接和查询表部件,同步结果表与已定义名称,并保留未知的属性、子节点和扩展列表
- 行和列编辑保持查询结果范围对齐,而同一工作簿和跨工作簿的工作表复制保留查询所有权,并重新映射连接标识符和冲突的名称
修复
- 查询表可以与标准表、线程批注和数据透视表共存,而不会发生工作表或工作簿关系标识符冲突
版本 2.224.0
新增
- 经典 XLS 与现代 XLSX 工作表现在公开 AddDataTable 和 DataTables ,用于单变量行、单变量列及双变量 What-If 数据表
AddDataTableDataTables
更改
- 工作簿重算在隔离的输入上下文中评估每个数据表结果(包括间接公式依赖),并通过打开、保存、工作表复制以及结构性行或列编辑保留定义与缓存结果
修复
- 已删除的 What-If 输入单元格现在产生 #REF! 结果,并且经典工作簿重算会访问每个工作表,而不再遗漏第一个工作表
#REF! - 在经典工作表顶部插入行不再在 Win64 上带来访问冲突风险
版本 2.223.0
更改
- 并行直接读取器的取消现在会通过活动的 ZIP 成员读取和每个解压缩步骤传播,而不再等待下一次 XML 拉取
修复
- 中止并行工作表扫描不再等待大型压缩 XML 读取完成,即可释放被阻塞的工作线程
版本 2.222.0
新增
TXLSDirectReader.ParallelBufferMemoryLimitTXLSDirectReader.ParallelBufferMemoryLimit 为并行工作表扫描限制聚合原始单元格队列负载,而 ParallelPeakBufferedBytes 公开所测峰值用于诊断和容量测试ParallelPeakBufferedBytes
更改
- 并行直接读取现在将工作表 ZIP 条目流式传入工作线程本地 XML 读取器和有界生产者-消费者队列,而不再保留完整的已解压工作表 XML 和每表完整单元格缓冲区
- 活动工作表接收独立队列预算,并按工作线程大小的窗口处理,从而保留回调顺序,且不让后续工作表饿死当前正在发出的工作表
修复
- 单元格中止、回调失败和工作线程错误现在唤醒被阻塞的生产者和消费者,协作式停止 XML 拉取,汇合所有工作线程,并使直接读取器保持可重用
版本 2.221.0
更改
- 多表 XLSX 打开现在将每个工作表 ZIP 条目直接流式传入其工作线程本地的解压器和 XML 读取器,而不再在解析前保留已解压的工作表 XML
- 并发工作表读取器仅对来自包源的短定位读取进行序列化,因此解压缩和 XML 解析保持并行,而瞬时工作表输入内存受活动工作线程数限制
版本 2.220.0
新增
- 数据透视表结果生成现在执行全部九种经典 ShowDataAs 模式,包括差值、占某基准项的百分比、百分比差值、累计求和、占行百分比、占列百分比、占总计百分比以及指数计算
ShowDataAs xlPivotBaseItemPreviousxlPivotBaseItemPrevious 和 xlPivotBaseItemNext 为比较计算中的相邻基准项提供类型化选择器xlPivotBaseItemNext
更改
- 数据透视表百分比和指数值使用直接从源记录聚合的行、列和总计,在不重新扫描源的情况下保留正确的 Average、Product、Count、方差和标准差的语义
- 累计求和遵循数据透视表项的顺序,为每个对等组独立重置,并为高基数数据透视表保留稀疏结果存储
修复
- BIFF8 SXDI 记录现在使用标准的 14 字节固定布局,并通过类型化读取保留 ShowDataAs 、基准字段、基准项、数字格式和显示名称,同时旧版 HotXLS 记录仍然可读
SXDIShowDataAs - XLSX 数据字段现在写入数据透视表字段索引,将 previous 和 next 选择器映射到所需的 OOXML 值,并仅为使用它们的模式发出基准属性
- 缺失的比较单元格保持空白,而存在的零分母返回 #DIV/0! ,而不是与缺失数据混淆
#DIV/0!
版本 2.219.0
修复
VDBVDB 现在在分数期间应用可变余额递减折旧,在有利时切换为直线折旧,并遵循 no_switchno_switch- 零因子、残值边界、分数起始期间和无效期间范围现在遵循 Excel 兼容的结果,而不是对期间取整并返回简化的余额递减折旧近似值
版本 2.218.0
新增
TXLSXWorksheet.ScenariosTXLSXWorksheet.Scenarios 现在提供类型化的 What-If 方案管理器创作,包括命名方案、活动和显示索引、可变单元格区域、用户和注释元数据、锁定和隐藏状态以及拥有的输入单元格值- 方案定义现在遵循工作表副本以及行或列的结构化编辑,同时在写入无效元数据之前验证 Excel 兼容性限制
修复
- 打开和保存 Excel 创作的方案现在保留根属性和嵌套的输入单元格,而不是将层次结构扁平化为有损的原始 XML
- 方案、自动筛选、数据合并、合并单元格和语音工作表元素现在使用架构顺序,以便严格的电子表格使用者不需要修复过程
版本 2.217.0
新增
TXLSXWorksheet.IgnoredErrorsTXLSXWorksheet.IgnoredErrors 现在为每个标准的忽略错误类别提供类型化创作,支持多区域引用、工作表复制、结构化编辑更新以及打开/保存往返TXLSXWorkbookTXLSXWorkbook 现在公开引用模式、保存时重新计算、全精度、并发计算和手动并发设置,以及现有的计算选项
修复
- 现在,每个非默认的工作簿计算设置都会独立生成并进行往返一个按架构排序的 calcPr 元素,包括在启用迭代之前配置的迭代限制
calcPr - 计算模式、引用模式、迭代边界、计算标识符和手动并发计数现在会拒绝或规范化无效值,而不是写入有歧义的工作簿状态
版本 2.216.0
更改
XMATCHXMATCH 和 XLOOKUP 现在在指定时执行对数升序或降序二分搜索,包括兼容 Excel 的重复值和近似匹配边界XLOOKUPXIRRXIRR 现在通过一个带保护的求解器尊重其猜测值,能够找到高位及对猜测敏感的根,而 XNPV 使用补偿求和以及经过校验的日期与利率输入XNPV- 高基数 XLSX 定义名查找现在使用惰性的作用域感知哈希索引,同时保留序列化顺序、本地名优先级以及首次匹配行为
- 保留的 XLSX 包部件现在一次性分配其声明的未压缩大小,同时保留完整的长度和 CRC 校验
修复
- 无效的查找模式、通配符二分搜索、二维查找范围以及不匹配的 XLOOKUP 返回向量现在报告公式错误,而不再产生歧义结果
XLOOKUP XIRRXIRR 和 XNPV 现在拒绝无效的现金流符号、利率、猜测值和日期,截断小数日期序列号,并在不收敛时报告,而不再返回未经验证的中间值XNPV
版本 2.215.0
新增
FREQUENCYFREQUENCY 现在返回一个垂直数组,每个区间一个结果,外加一个溢出桶
更改
SORTSORT 现在对行或列使用稳定的可扩展排序,保留相等键的源顺序UNIQUEUNIQUE 现在对行或列使用稳定的哈希索引匹配,包括 exactly_once 结果和不区分大小写的文本exactly_oncePERCENTRANK.INCPERCENTRANK.INC 、 PERCENTRANK.EXC 和 MODE.MULT 现在在高基数输入上能高效扩展,而不再依赖二次扫描PERCENTRANK.EXCMODE.MULT
修复
- SORT 和 UNIQUE 的 by_col 选项现在对列进行操作,而不再回退到行行为
by_colSORTUNIQUE
版本 2.214.0
新增
- XLSX 打开现在接受带有字节顺序标记或所需的特定字节序声明的流式 UTF-16 小端和大端 XML 部件,包括基本多文种平面之外的字符
更改
- 高基数数据透视表缓存刷新现在对共享值使用确定性哈希索引并一次性分配记录矩阵,保留首次出现项的顺序,同时避免重复的线性搜索和逐行增长
- 投影式直接读取会在将原始值、公式和富文本复制到各工作表缓冲区之前,丢弃选定行和列之外的单元格
修复
- 带有重复字节顺序标记、不受支持或互相矛盾的编码声明、UTF-32 签名、奇数 UTF-16 字节长度或无效代理项对的畸形 XML 现在会被拒绝
- 并行直接读取工作器现在会在启动前初始化所有作业状态,在发生故障后停止接收新的工作表作业,确定性地重新抛出索引最低的作业错误,并在池构造失败时清理每个已创建的工作器
版本 2.213.0
新增
T.TESTT.TEST 现在除了配对样本之外,还使用合并相等方差或 Welch 不相等方差计算独立样本,包括单尾和双尾概率
更改
- XLSX 打开现在会跟踪工作表、共享字符串、样式、主题、宏、外部链接、注释、线程注释、VML、绘图、图像、图表、表格和数据透视表的工作簿、工作表和绘图关系目标,包括使用重命名或非连续部件路径的有效包
修复
- 带有重复关系标识符的畸形包不再允许在兼容性恢复期间由随后不受支持的关系替换首个可用目标
版本 2.212.0
更改
- 公式依赖跟踪现在通过在重建和脏单元格失效之前对单元格和区域依赖关系进行索引,从而在大型工作表上实现更好的扩展性
- 大型统计和回归公式现在会计算所提供区域中的每个数值,而不是在先前的固定大小缓冲区处停止
修复
- 工作表网格之外的 XLSX 单元格会被一致拒绝,从而使无效坐标不再混淆有效单元格
- 编辑公式不再重置工作簿计算模式、迭代限制、完全计算标志或其他计算设置
- Blob 列表读取现在会显式验证所请求的区域,并允许流末尾存在有效的空分片
安全
- 经典 XLS 加密现在除了工作表数据外,还覆盖了数据透视表缓存流
- 畸形的 SST 扩展尾部和 ZIP 核心目录记录会在发生超大分配、截断读取或注释中嵌入的伪造目录记录影响加载之前被提前拒绝
版本 2.211.0
新增
TXLSPivotTable.MakeTXLSPivotTable.Make 现在会具体化每个配置的数据字段及其自身的聚合,并根据 DataFieldAxisIsRow 在行或列上展开对应的值DataFieldAxisIsRow
更改
- 数据透视表结果生成在所有数据字段中重用了哈希索引的行和列键值域,根据结果形状选择密集或稀疏的累加器存储,保留了超过九个键的缓存项顺序,并为多字段轴发射可读的组合标签
修复
CountCount 现在包含非空文本、Boolean、错误、日期和数字缓存值,而 CountNums 仅包含数字 and 日期值, Product 在没有数字值的交叉区域返回零,空白单元格不再计为条目,并且仅包含值的数据透视表可以在没有行或列字段的情况下具体化其总计CountNumsProduct
版本 2.210.0
新增
TXLSWorkbookViewerTXLSWorkbookViewer 现在可以渲染 XLSX 条件填充、字体颜色和加粗、数字格式、方向性正负数据条、渐变、边框、轴、隐藏值以及所有内置的图标集系列TXLSWorkbookViewer.RefreshConditionalFormatsTXLSWorkbookViewer.RefreshConditionalFormats 在调用方就地修改附加的 XLSX 工作簿后重建准备好的聚合和阈值状态
更改
- 查看器为每个活动工作表缓存一个准备好的条件格式评估器,在滚动、选择和重绘操作中重用它,并在工作簿或工作表更改时释放它
修复
- 最右侧边界的数据条轴现在被裁剪在所属单元格内部,而不是绘制到相邻单元格中
版本 2.209.0
新增
- XLSX 工作表现在公开了一个准备好的条件格式评估器,可以为任何单元格解析规则优先级、 StopIfTrue 、相对公式、差分样式、前/后排名、高于/低于平均值测试、重复和唯一值、相对日期区间、双色和三色刻度、数据条以及图标集
StopIfTrue
更改
- HTML 和 PDF 导出现在可以渲染匹配的条件填充、字体加粗和颜色、数字格式、色标、方向性正负数据条、显式轴、图标系列字形、隐藏值以及带有色调解析的主题颜色
- 大型条件格式定义域现在重用已编译的相对公式,而无需为每个单元格分配语法树,流式传输均值、偏差、最小值和最大值统计数据,仅针对排名或百分位数规则保留有序值,批量排序 Unicode 重复键,并使用行带候选索引以避免扫描无关规则
修复
- 经典条件规则现在能正确加载表达式类型,并在边界之间、不区分大小写的文本谓词、空白单元格以及错误谓词评估中保持一致的求值结果
版本 2.208.0
更改
- 压缩式单元格存储引擎现在写入原生的带标记字符串、Boolean、错误和空负载,按行优先顺序遍历单元格,并对连续的等类型单元格进行游程编码,从而降低内存占用并加快顺序输出
- 经典工作簿共享字符串现在将字符字节保留在一次分配中,并按需创建解码后的字符串值,从而降低大型唯一字符串表的分配开销
新增
- 数据透视表现在可以从缓存记录中计算完整的结果矩阵,支持行键和列键分组以及全部 11 种受支持的聚合函数
- 经典工作簿图表现在公开带类型的系列、坐标轴、图例和图表组信息,便于转换和检查工作流
版本 2.207.0
新增
TXLSPivotCache.RefreshFromSourceTXLSPivotCache.RefreshFromSource 可从源工作表区域构建数据透视表缓存:它读取标题行为字段命名,将每行数据的不同取值提炼为各字段的共享项域,根据第一个非空值锁定字段类型,并为每个(记录,字段)记录共享项索引 — 这样就可以通过数据区域以编程方式创建数据透视表,而无需依赖 Excel 的 refreshOnLoad 。基于回调的取值读取器使数据透视表单元免于对工作表的直接依赖refreshOnLoad
版本 2.206.0
新增
- 新增的 TlxCellMMU ( lxCellMMU 单元)实现了一个压缩式、行优先的单元格存储引擎,支持对等类型和空单元格序列进行游程编码,并使用一个带标记字节类型代码同时兼作数据宽度选择器 — 因此一列小整数每个单元格只需一个字节,而不是八个。该引擎以能保留取值的最小宽度(int8 / int16 / int32 / 2 位小数 / 4 位小数缩放整数 / IEEE double)编码数字,紧凑地存储字符串索引、Boolean、错误和空单元格,并提供 GetValue / SetNumber / SetString API 以及一个前向迭代器。这是位于现有 TXLSXCells API 之后的下一代后端,在功能标志之后启用,目标是在密集工作表上将工作集缩减 10–25×
TlxCellMMUlxCellMMUGetValueSetNumberSetStringTXLSXCells
版本 2.205.0
新增
TXLSCustomChart.GetChartInfoTXLSCustomChart.GetChartInfo 现在从原始 BIFF 图表记录流中解码出语义摘要 — 图表类型系列(柱形、折线、饼图、面积、散点、雷达、圆环、曲面、气泡)、系列数量以及图例是否存在 — 这样就可以通过编程方式查询 BIFF 图表的类型,BIGH 到 XLSX 的图表转换也能选择正确的目标系列。保证往返保真度的字节透传存储保持不变
版本 2.204.0
更改
- 经典 .xls 共享字符串表现在以压缩的 Latin-1 编码([MS-XLS] §2.5.294 fHighByte=0 ,每字符一字节)写入纯 ASCII 字符串,而不是始终使用 UTF-16,从而将 ASCII 内容为主的工作簿的 SST 大小 — 进而将 .xls 文件 — 大致缩减一半
.xlsfHighByte=0.xls
版本 2.203.0
新增
- 新增的 TlxCompoundFile 直接以纯 Pascal 读写复合文件二进制(OLE2)容器格式,无需 ole32.dll / COM IStorage 依赖 — 为内存中和跨平台的 .xls 处理打开了大门。读取器涵盖了 HotXLS 在实际环境中遇到的 v3 布局(文件头 + 文件头内 DIFAT + FAT 链遍历 + 4096 字节以下流的 MiniFAT 和微型流 + 目录树);写入器输出一个最小但有效的 v3 容器,足以满足 HotXLS 的输出需求
TlxCompoundFileole32.dllIStorage.xls
版本 2.202.0
新增
- 自动筛选的排序状态现在拥有一个带类型的模型(带有 TXLSXSortCondition 子项的 TXLSXSortState ),涵盖按值 / 单元格颜色 / 字体颜色 / 图标排序、排序方式(无 / 笔画 / 拼音)、区分大小写、按列排序以及按条件自定义列表 — 这样应用程序就可以通过编程方式构建排序状态,而无需编辑原始 XML;对于 HotXLS 并非作者的文件,旧版不透明的 SortStateXml 透传仍然优先
TXLSXSortStateTXLSXSortConditionSortStateXml - 动态筛选现在作为带类型的 TXLSXDynamicFilterType (高于/低于平均值和标准差、今天/昨天/明天、本周/上周/下周、本月、本季度和本年度、年初至今、Q1–Q4、M1–M12)进行读写,并带有可选的 val / maxVal 边界 — 打开使用动态筛选的工作簿不再会在保存时丢失它
TXLSXDynamicFilterTypevalmaxVal
版本 2.201.0
新增
- 曲面图和三维曲面图( xlsxChartSurface / xlsxChartSurface3D )现在是一等图表类型 — 与其他图表系列一样可以进行写入、读取和往返
xlsxChartSurfacexlsxChartSurface3D - 自选图形创作 API 覆盖了 OOXML 预设几何列表的一个实用子集 — 三角形、菱形、平行四边形、六边形、八边形、箭头、燕尾形、标注、流程图节点、星形、心形、太阳、月亮、括号和大括号 — 每个都映射到正确的 prst 标记和 [MS-ODRAW] 形状 ID,因此创作的形状在 Excel 中能正确渲染(完整的 187 个预设列表已通过原始锚点透传在往返时保留)
prst[MS-ODRAW]
版本 2.200.0
修复
- 打开其自动筛选使用颜色筛选或图标筛选的工作簿不再会在保存时丢失该筛选 — colorFilter 和 iconFilter 现在被读入带类型的列( TXLSXAutoFilterColumn.SetColorFilter / SetIconFilter )并原样重新输出,而不再作为无法识别的筛选列子项被丢弃
colorFiltericonFilterTXLSXAutoFilterColumn.SetColorFilterSetIconFilter
版本 2.199.0
新增
TCondFormatRule.EvaluateTCondFormatRule.Evaluate 用于回答某个条件格式规则是否对给定单元格生效,涵盖单元格值比较、公式表达式、文本包含/开头是/结尾是、空白和错误规则 — 这是查询某个规则当前高亮了哪些单元格以及在 Excel 之外渲染条件格式结果的基础
更改
FACTFACT 及内部阶乘辅助函数现在使用预计算的 0!..170! 表,而不再每次调用都重新计算 O(n) 乘积,从而加速 FACT 、多项式系数以及 Poisson/Binomial/卡方分布路径FACT
版本 2.198.0
更改
- 保存工作表现在通过一次先计数后填充的扫描将单元格归组为行,而不是随每个单元格重新分配来扩展每一行的索引,从而消除大型工作表上隐藏的 O(单元格数 × 每行单元格数) 拷贝开销
- 公式依赖图现在按(工作表,行)对其引用区域建立索引,因此种子化一个脏单元格时会对候选行带进行二分搜索,而不是在每个被更改的单元格上都扫描每个公式 — 工作簿越大、工作表越多,重算时的加速越明显
- 行优先、按列排序的单元格遍历现在作为 TXLSXWorksheet.BuildRowMajorCellOrder 公开,因此保存、剪贴板、自动筛选以及其他按行顺序消费的代码可以共享同一次遍历,而无需重新推导
TXLSXWorksheet.BuildRowMajorCellOrder
版本 2.197.0
修复
- 当包含雷达图、股价图以及复合饼图/复合条饼图的 .xlsx 工作簿被打开并重新保存时,这些图表不再丢失 — 图表读取器现在能识别它已经写入的 c:radarChart 、 c:stockChart 和 c:ofPieChart 容器元素,恢复了读写对称覆盖
.xlsxc:radarChartc:stockChartc:ofPieChart SUBTOTAL函数代码为 101–111 的 SUBTOTAL 现在会排除隐藏行上的值,而 AGGREGATE 现在会遵循其忽略隐藏行的选项代码(2、3、6、7),与 Excel 行为一致,而不是把包含隐藏和忽略隐藏的变体同等对待AGGREGATE- 以多于声明参数的方式调用固定元数内置函数(例如 =SIN(1,2) )现在会集中抛出 #VALUE! ,而不是被调度器接受
=SIN(1,2)#VALUE!
版本 2.196.0
修复
- 行列插入或删除现在会在被编辑目标区域需要不同的相对公式锚点时,对单元格值和表达式条件格式以及数据验证进行分区,同时保留规则设置、分配唯一的条件格式优先级,并保持聚合条件格式定义域完整
版本 2.195.2
更改
- PDF 导出现在通过 Windows fontsub.dll 的 CreateFontPackage API 对嵌入的 TrueType 字体进行子集化,仅保留文档实际渲染的字形,而不再嵌入整个 .ttf — 通常会将 Unicode 内容为主的工作表的 PDF 缩小 8–20×;当子集化不可用时回退为完整嵌入
fontsub.dllCreateFontPackage.ttf
版本 2.195.1
修复
- 在经典 .xls 引擎上插入或删除行列现在会重写每个受影响的公式引用(单元格公式和已定义名称)以符合 Excel 语义 — 插入点下方的引用会发生位移,完全位于删除区域内的引用变为 #REF! ,部分重叠的区域会收缩 — 而不再留下陈旧的坐标
.xls#REF!
版本 2.195.0
更改
- 删除表格列现在会将每个受影响的结构化引用标记转换为 #REF! ,覆盖工作表公式、表格公式、已定义名称和图表系列,同时保留无关引用和字符串字面量
#REF!
修复
- 删除整个表格不再留下指向已不存在表格的限定结构化引用
- 克隆的数据验证现在会保留其 IME 输入模式
版本 2.194.0
更改
- 行列编辑现在会使 Excel 表格的列标识符、名称、计算公式、汇总公式、筛选列、筛选区域和排序条件与被编辑的表格保持对齐
修复
- 当删除移除了条件格式和数据验证公式的首个目标区域时,现在会重新基准化其相对和混合引用
- 工作表和表格排序状态现在会写入有效属性,并丢弃其区域已被删除的条件
版本 2.193.0
更改
- 行列编辑现在会更新复杂和跨作用域的已定义名称公式、气泡图数据区域以及基于公式的可视条件格式阈值
- 气泡图和散点图现在在重新打开时会恢复其 X 轴、Y 轴和气泡大小系列区域
修复
- 多区域条件格式和数据验证目标现在会独立地移动每个幸存区域,而不再保持完整的目标列表不变
- 文本框和艺术字锚点现在会随行列的插入和删除而移动或调整大小
版本 2.192.0
新增
- 流式直接读取和行游标遍历现在可以选择带有完整 run 格式、拼音 run 和拼音属性的结构化富文本字符串,同时保留有界的共享字符串存储
TXLSDirectWriter.WriteRichStringTXLSDirectWriter.WriteRichString 将带格式和拼音的文本作为内联字符串或去重后的共享字符串写入
更改
- 富共享字符串去重现在能区分 run 格式和拼音元数据,同时让普通字符串驻留继续走其现有的快速路径
修复
- 内联字符串中的拼音文本不再被包含在显示的单元格值中
版本 2.191.0
新增
TXLSXRange.SetDynamicArrayFormulaTXLSXRange.SetDynamicArrayFormula 现在创建带有完整 Excel XLDAPR 元数据链的原生动态数组公式
更改
- 动态数组根现在共享一条去重后的工作簿元数据记录,跨工作表的工作表或区域复制会将该记录重新映射到目标工作簿
- 当禁用不支持的包部件保留时,受支持的动态数组元数据仍然可用,而无关的值元数据仍会被移除
修复
- 动态数组溢出单元格不再被建模为遗留 CSE 跟随项,并且替换或清除根不再留下陈旧的元数据索引
- 移除最后一个动态数组根现在会移除未使用的元数据部件、工作簿关系和内容类型条目
版本 2.190.0
更改
- 流式直接读取和行游标遍历现在会将共享公式跟随项展开为完整的单元格相对公式,同时保留投影和有界内存的行为
修复
- 动态数组工作簿现在会在打开和保存周期中保留单元格和值元数据索引、公式重算属性、元数据包关系以及未更改的未来函数前缀
- 禁用不支持的部件保留不再会在元数据部件被移除后留下悬空的工作表元数据索引
版本 2.189.0
新增
- 打开 XLSX 工作簿现在会将共享公式跟随项展开为完整的逐单元格公式,带有正确的相对、绝对、混合、区域以及工作表限定引用
修复
- 自闭合的共享公式跟随项不再捕获后续的值或公式 XML,并且其缓存结果能在打开和保存周期中保留
- CSE 数组公式现在能通过行或列结构编辑、完整区域复制、工作表复制和跨工作表的工作表复制保留其锚点和跟随关系
- 分配普通公式或清除单元格现在会移除陈旧的 CSE 数组成员身份,使计算不会被重定向到旧的数组锚点
- 仅复制 CSE 数组的一部分不再会在目标中创建悬空的跟随引用
- 区域复制现在会对重叠的源进行快照并移动相对公式引用,从而防止源单元格或数组锚点在被复制之前被覆盖
- 仅与 CSE 数组的一部分相交的行或列编辑现在会被拒绝,而不是静默地调整数组大小或分离数组
版本 2.188.0
新增
TXLSDirectReader.SharedStringMemoryLimitTXLSDirectReader.SharedStringMemoryLimit 限制已解码共享字符串的内存,并在较大的表超过限制时自动迁移到关闭时删除的索引式临时存储,并带有固定大小的值缓存TXLSRowCursor.SharedStringMemoryLimitTXLSRowCursor.SharedStringMemoryLimit 为仅向前行遍历公开同样的有界共享字符串存储控制
更改
- 直接共享字符串解析现在能保留仅空白值、CDATA、XML 实体、非 BMP 字符、空条目以及富文本 run 顺序,同时将拼音指南文本排除在显示值之外
修复
- 打开 XLSX 工作簿现在会按文档顺序保留每一个共享字符串条目,防止重复文本或格式不同的富字符串导致后续单元格索引坍缩
- 保存 XLSX 工作簿现在会按 run 边界和格式属性(而不仅仅是可见文本)对富字符串去重,从而为显示值相同的单元格保留不同的格式
版本 2.187.0
新增
TXLSDirectReader.FirstRowTXLSDirectReader.FirstRow 和 LastRow 将流式读取限制在一个从 1 开始的行范围内,并在请求区域之后停止工作表解析LastRowTXLSDirectReader.IncludeColumnTXLSDirectReader.IncludeColumn 和 ClearColumnProjection 提供常数时间的列投影,可在值解码和回调分发之前跳过未选中的单元格ClearColumnProjection
版本 2.186.0
新增
TXLSDirectWriter.UseSharedStringsTXLSDirectWriter.UseSharedStrings 可以将重复文本去重到 OOXML 共享字符串部件中,并带有准确的总数和唯一计数,从而减小重复内容繁多的数据包大小TSimpleDomReaderTSimpleDomReader 提供一个紧凑的单遍 XML 树,用于对工作簿元数据和包部件进行随机访问查询,支持区分大小写的 QName 和 local-name 查找
更改
- 直接 XLSX 读取现在使用哈希辅助的精确元素分发、单遍属性采集以及常数时间的当前行列查找,同时保留流式内存行为
- 共享字符串 XML 生成现在使用线性增长的缓冲区,避免在大型不同字符串表上反复进行整串拷贝
修复
- CSV 公式导出不再会在公式文本已包含等号时再加上第二个等号
- XLSX PDF 导出不再会在布局之前使用字符数估计截断单元格文本
- XML 读取器名称哈希现在能跟踪处理指令、属性,并在不暴露陈旧元素状态的情况下回到所属元素
版本 2.185.1
修复
- 插入或删除行列现在会恰好调整一次局部和跨工作表公式引用,同时保留函数名称和文本字面量
版本 2.185.0
新增
TXLSPDFExportTXLSPDFExport 现在提供从 1 开始的 FirstPage 和 LastPage 输出选择、完整的逻辑 PageCount ,以及六个面向经典与 XLSX 区域、工作表和工作簿的 CalculatePageCount 重载,且无需构造 PDF 页面对象FirstPageLastPagePageCountCalculatePageCountTXLSXWorkbook.SaveWorkbookAsHTMLTXLSXWorkbook.SaveWorkbookAsHTML 将可见工作表发布到一个可导航的 HTML 文档中,带有稳定的工作表锚点、转义的标题和工作表名称,并提供包含隐藏或非常隐藏工作表的选项TDataToXLS.BeforeRecordTDataToXLS.BeforeRecord 可以在行输出之前跳过记录, BeforeValue 可以借助数据集、明细级别、源字段和导出列上下文转换或抑制字段值BeforeValueTXLSWorkbookViewerTXLSWorkbookViewer 公开所选单元格的批注和超链接,引发由应用程序控制的超链接事件,绘制批注指示器以及 XLSX 字体、填充和对齐,并在合并区域内规范化选择和渲染
更改
- ConversionWorkbench 示例现在可以生成 PDF 输出,并为 HTML 目标发布所有可见的 XLSX 工作表,而 WorkbookViewer 示例演示了合并单元格导航、批注和超链接激活
版本 2.184.0
新增
- 经典 XLS 和 XLSX 区域现在可以通过 CopyToClipboard 将 Unicode 表格文本和带样式的 HTML 复制到 Windows 剪贴板,保留公式、合并单元格、链接、显示格式,并对嵌入的制表符、换行符和引号进行安全引用
CopyToClipboard TXLSXWorkbookTXLSXWorkbook 现在保留从未知的包根、工作簿、工作表或绘图关系中可达的自定义包部件,包括关系 ID 冲突处理、内容类型、子关系、压缩选择以及精确的负载字节; PreserveUnsupportedParts 、 UnsupportedPartCount 、 UnsupportedPartBytes 和 ClearUnsupportedParts 公开控制和诊断PreserveUnsupportedPartsUnsupportedPartCountUnsupportedPartBytesClearUnsupportedParts- 经典 XLS 保存现在通过 OnProgressEx 公开可取消的开始、工作和结束回调,而 IXLSWorkbookProgress 提供带有稳定代码、严重性、操作、工作表上下文、原生返回值和异常详情的结构化诊断
OnProgressExIXLSWorkbookProgress TXLSXWorkbookTXLSXWorkbook 现在为保存、打开、重算、取消和异常报告公开同样的结构化 Diagnostics 、 LastDiagnostic 和 OnDiagnostic 表面DiagnosticsLastDiagnosticOnDiagnostic- 已解析的 VBA 模块现在支持编辑 SourceCode ,并通过经典 XLS、独立 VBA 存储和启用宏的 OOXML 保存回写更新后的压缩模块流,同时保留流前缀和未改动的工程内容
SourceCode - 经典工作表和形状集合现在公开带类型的 TXLSCheckBox 、 TXLSComboBox 和 TXLSListBox 窗体控件,并带有创建辅助、标签、控件类型检查、单元格锚点、删除以及打开/保存发现
TXLSCheckBoxTXLSComboBoxTXLSListBox TXLSXRange.ApplyFormatPatchTXLSXRange.ApplyFormatPatch 可以选择性地复制字体、填充、边框、数字格式、对齐和保护组件,并对源图案进行平铺,同时保留目标值和未选中的格式TDataToXLSTDataToXLS 可以通过 ReadDetailTables 和 IndentDetailTables 递归导出链接的主-明细数据集,保留活动数据链接,在每个主记录下方追加每个明细表,并在每一级继承字段、标题和格式选项ReadDetailTablesIndentDetailTablesTXLSXWorksheet.AddWordArtTXLSXWorksheet.AddWordArt 创建以单元格锚定的 DrawingML 文本,带有预设变形以及可配置的文本和轮廓颜色,而原始绘图锚点保留路径会在后续的打开/保存周期中保留完整的艺术字形状TXLSWorkbookViewerTXLSWorkbookViewer 为经典和现代工作簿对象添加了一个 VCL 工作表查看器,支持加载 XLS、XLSX、XLSM、模板和 ODS 文件、带格式的单元格文本、经典样式、行列尺寸、页眉、网格线和选择渲染、滚动条、鼠标选择、键盘导航、单元格定位、工作表切换以及选择或工作表事件- 新的 Delphi FeatureShowcase 和 WorkbookViewer 示例演示了带样式的 PDF 打印、打印标题、手动分页符、经典窗体控件、选择性格式补丁、艺术字、诊断、运行时查看器创建、文件加载、单元格导航、工作表切换和查看器事件,并配有相应的英文指南和开发者参考主题
FeatureShowcaseWorkbookViewer
更改
- 经典 XLS 和现代 XLSX 工作簿、工作表和区域的 PDF 导出现在会将每个可见工作表写入一个文档,跳过隐藏和图表工作表,渲染实心填充、字体颜色、字体大小、加粗和倾斜强调、水平和垂直对齐、显式单元格边框以及可选的工作表网格线,遵循每个工作表的打印区域、纸张大小、方向、页边距、缩放、适应宽度设置、列宽、实际行高、手动行列分页符、重复的标题行和列,以及带有页码、总页数、工作表名称、日期和时间字段的三段式页眉页脚,在两个方向上对宽和高的区域进行分页,发出与区域设置无关的 PDF 数字语法,并为 WinAnsi 之外的文本嵌入一个合格的 TrueType 字体和 ToUnicode 映射
- XLSX 扩展进度回调现在能为保存、打开和重算接收到可靠的工作、结束状态,而遗留回调仍仅为工作状态,并且每个操作都会重置之前的取消状态
- 经典 XLS 序列化现在会传播工作表、图表、样式扩展、VBA、控件流、存储和输出提交失败,而不再报告成功,文件保存会在原子替换目标之前先暂存完整的复合文件
- XLSX 和 ODS 文件保存现在会构建一个完整的同级临时包,并仅在成功完成最终化后原子地替换目标,从而在取消或失败后保持现有文件不变
版本 2.183.0
新增
TXLSDirectWriterTXLSDirectWriter 现在支持可复用的包级单元格样式句柄和样式克隆,而无需缓存工作表行;同一个样式索引可以应用到任意数量的单元格,或跨工作表复用- 直接单元格样式提供 30 种格式化能力,涵盖字体名称、大小、BGR 颜色、加粗、倾斜、删除线、轮廓、阴影、五种下划线模式、19 种带前景/背景色的填充图案、五条独立着色且带 14 种线型和双向对角线的边框、内置或自定义数字格式、水平和垂直对齐、自动换行、缩小以填充、缩进、文本旋转、引号前缀以及锁定/隐藏保护
- 字符串、数字、Boolean、日期、公式、错误以及每种缓存公式结果类型都提供了带样式的重载,使大批量导出器可以在顺序写入期间通过整数索引选择预构建的样式
更改
- 直接写入器在构建 styles.xml 时会对相等的字体、填充、边框和数字格式组件进行去重,同时保留已写入到工作表流中的稳定单元格样式索引
styles.xml - 生成的直接写入器样式表现在在自定义填充之前包含标准的 none 和 gray125 默认填充,以获得更严格的 OOXML 兼容性
nonegray125
版本 2.182.0
新增
TXLSDirectWriterTXLSDirectWriter 现在可以写入条件格式,同时保留与行数无关的内存占用,支持八种单元格值运算符、表达式规则、包含/不包含/开头是/结尾是文本规则、前 N 或后 N 的值和百分比规则、高于或低于平均值规则、重复值和唯一值、空白和非空单元格、错误和非错误单元格、数据条、双色和三色刻度以及全部 17 种基线图标集系列- 直接条件格式规则支持显式优先级、stop-if-true 求值、平均值标准差和相等性选项、图标阈值替换、仅图标和反向显示、数据条值可见性、BGR 颜色以及差分填充、字体颜色、加粗和倾斜样式
更改
- 直接写入器跨工作表去重等价的差分样式,且仅存储条件格式规则和样式,因此内存占用随规则数量扩展,而不是随工作表行数扩展
- 自动数据条最小值和最大值阈值类型被规范化为基础 OOXML 元素中的标准 min 和 max 标记,以获得更广泛的电子表格兼容性
minmax
版本 2.181.0
新增
TXLSDirectWriterTXLSDirectWriter 现在可以在不缓存工作表数据的情况下写入工作表和工作簿保护,包括 15 项细粒度的工作表权限、遗留密码验证器、现代哈希元数据、可编辑的受保护区域(带有可选密码或安全描述符)、工作簿结构和窗口锁定、原始验证器赋值以及清除保护
修复
- 不支持的绘图锚点现在在为往返输出而重建时会保留每个闭合元素,因此仅形状的绘图在打开和保存后仍保持格式良好
- XLSX 工作表保护权限现在遵循 OOXML 锁定标志定义,因此允许的操作写入 0 ,禁止的操作写入 1 ,省略的属性在重新打开时恢复为其架构默认值
01 - 遗留的 XLSX 工作表、受保护区域和工作簿密码现在使用与 Excel 兼容的 16 位验证器算法,带有 ANSI 转换和 15 字节限制
版本 2.180.0
新增
- XLSX 工作表模型现在可以往返 What-If 假设分析管理器( <scenarios> )和数据合并( <dataConsolidate> )元素。 TXLSXWorksheet 上新增的 ScenariosXml 和 ConsolidateXml 原始 XML 属性原样携带内部内容 — 写入器发出包装元素,读取器将方案/数据合并子项解析回来。定义了方案或合并定义的财务建模文件不再会在往返时丢失它们
<scenarios><dataConsolidate>ScenariosXmlConsolidateXmlTXLSXWorksheet
版本 2.179.0
新增
- 新增的 XlsxBuildNumFmt 辅助函数从语义属性构造 OOXML 数字格式代码 — Decimals 、 Thousands (分隔符)、 NegativeRed (负数红色)、 CurrencySymbol 和 Percent 。调用方不再需要手工编写类似 "$#,##0.00;[Red]-$#,##0.00" 的格式字符串 — 构建器会从简单参数生成它们。设计用于与 Cell.NumberFormat 或 Workbook.NumberFormats.Add 一起使用
XlsxBuildNumFmtDecimalsThousandsNegativeRedCurrencySymbolPercent"$#,##0.00;[Red]-$#,##0.00"Cell.NumberFormatWorkbook.NumberFormats.Add
版本 2.178.0
新增
- XLSX 工作表模型现在可以往返 VBA 代码名( <sheetPr codeName="..."/> ),这对于 VBA 工程通过代码名引用工作表的 VBA 互操作至关重要。 TXLSXWorksheet 上新增了 CodeName 属性
<sheetPr codeName="..."/>CodeNameTXLSXWorksheet - 批注现在支持 TXLSXComment 上的 AlwaysShow 可见性开关 — 当为 True 时,批注气球始终可见(即 Excel 的逐条批注“显示/隐藏批注”开关),而不仅仅是在悬停时显示
AlwaysShowTXLSXComment - 数据验证现在可以往返 TXLSXDataValidation 上的 IME 模式属性( imeMode )。这个 11 值的枚举控制在进入单元格时的中日韩输入法行为(noControl / off / on / hiragana / fullKatakana / 等)。对于日语/韩语/中文区域设置的文件至关重要
imeModeTXLSXDataValidation - 工作表模型除了现有的冻结模式处理之外,还为 <pane> 上的 pane-state 属性新增了 PaneState 属性 — 支持 frozenSplit (先冻结后可滚动)和 split 状态
PaneState<pane>frozenSplitsplit
版本 2.177.0
新增
- 三个先前已注册但未实现的工作表函数现在有了完整的调度: DOLLAR (货币格式文本)、 FIXED (固定小数文本,可选抑制逗号)和 AREAS (引用中的区域计数)。此前这些函数在 InitFuncHash 中已注册,但没有计算引擎分支 — 求值 =DOLLAR(...) 会静默返回错误结果
DOLLARFIXEDAREASInitFuncHash=DOLLAR(...) - XLSX 工作表模型现在可以往返各视图类型的缩放比例( zoomScaleNormal / zoomScalePageLayoutView / zoomScaleSheetLayoutView )、网格线颜色( sheetView color )以及工作表视图显示标志( showFormulas / showZeros )。 TXLSXWorksheet 上新增了以下属性: ZoomNormal 、 ZoomPageLayout 、 ZoomSheetLayout 、 GridColor 、 ShowFormulas 、 ShowZeros
zoomScaleNormalzoomScalePageLayoutViewzoomScaleSheetLayoutViewsheetView colorshowFormulasshowZerosTXLSXWorksheetZoomNormalZoomPageLayoutZoomSheetLayoutGridColorShowFormulasShowZeros - 分级显示的汇总方向现在可以往返。 TXLSXWorksheet 上新增的 SummaryBelow 、 SummaryRight 和 ShowOutlineSymbols 属性控制汇总行/列是否出现在明细的下方/右方,以及分级显示符号是否可见。写入器在 <sheetPr> 内部发出 <outlinePr> ;读取器将其解析回来
SummaryBelowSummaryRightShowOutlineSymbolsTXLSXWorksheet<outlinePr><sheetPr> - 工作簿的 calcPr 现在除了现有的 calcId / fullCalcOnLoad / calcMode / iterate 三元组之外,还带有 forceFullCalc 和 calcCompleted 属性
forceFullCalccalcCompletedcalcIdfullCalcOnLoadcalcModeiterate
版本 2.176.0
新增
- XLSX 公式引擎现在会在编译前解析结构化表格引用。 TXLSXWorkbook 上新增的 ResolveStructuredRefs 方法会扫描公式文本中的 TableName[ColumnSpec] 模式,并使用工作簿的 TXLSXTable 集合将它们替换为具体的 A1 区域引用。支持的规范包括列数据区域( Sales[Qty] )、当前行列( Sales[@Total] )、完整数据( Sales[#Data] / Sales[#All] )、表头( Sales[#Headers] )和汇总行( Sales[#Totals] )。该解析在 GetCompiledFormula 内部自动运行 — 现有公式不受影响,因为非表格标识符会原样保留。此前结构化引用会导致公式编译失败
ResolveStructuredRefsTXLSXWorkbookTableName[ColumnSpec]TXLSXTableSales[Qty]Sales[@Total]Sales[#Data]Sales[#All]Sales[#Headers]Sales[#Totals]GetCompiledFormula
版本 2.175.0
新增
- 公式引擎现在支持 R1C1 引用样式的公式编译。 TXLSCalculator 上新增的 GetCompiledFormulaR1C1 方法(以及 TXLSFormula 上的 GetCompiledR1C1 )接受以 R1C1 表示法书写的公式( R2C3 为绝对, R[-1]C[2] 为相对, RC 为当前单元格),并先使用公式单元格的行/列转换为 A1 表示法进行编译。独立的 R1C1ToA1 函数执行此转换 — 它能识别独立(不属于 ROUND 之类的函数名一部分)的 R / C 标记,解析可选的方括号偏移,并产生等价的 A1 引用。字符串字面量和标识符会被跳过。此前只能编译 A1 样式的公式
GetCompiledFormulaR1C1TXLSCalculatorGetCompiledR1C1TXLSFormulaR2C3R[-1]C[2]RCR1C1ToA1RC
版本 2.174.0
新增
TXLSDirectWriterTXLSDirectWriter 的自动筛选输出现在在流式写入 XLSX 文件时支持工作表和表格筛选列、值筛选、空白筛选、日期分组筛选、自定义比较筛选、动态筛选、前 N/后 N 筛选、筛选按钮标志、排序状态、排序条件、XML 转义以及重复的工作表/表格筛选区域抑制
版本 2.173.0
新增
TXLSDirectWriterTXLSDirectWriter 的表格输出现在在流式写入 XLSX 文件时支持表格批注、汇总行计数、列汇总行标签、列汇总行函数、计算列公式、汇总行公式以及表格列元数据的 XML 转义
版本 2.172.0
新增
TXLSDirectWriterTXLSDirectWriter 现在在流式写入 XLSX 文件时写入 Excel 表格部件,包括工作表表格关系、表格部件内容类型、表格区域、列名、标题行和汇总行标志以及内置表格样式显示标志,而无需构建完整的工作簿对象模型
版本 2.171.0
新增
TXLSDirectWriterTXLSDirectWriter 现在在流式写入 XLSX 文件时写入工作表数据验证,包括列表、整数、小数、日期、时间、文本长度、自定义公式、任意 sqref 、提示、错误警告、允许空白、下拉列表以及输入/错误消息标志,而无需构建完整的工作簿对象模型sqref
版本 2.170.0
新增
TXLSDirectWriterTXLSDirectWriter 现在在流式写入 XLSX 文件时写入工作簿和工作表级已定义名称,包括隐藏名称、批注、生成的绝对区域、打印区域、打印标题行、打印标题列、组合打印标题、带引号的工作表名称引用、XML 转义以及重复打印名称设置器的替换语义,而无需构建完整的工作簿对象模型
版本 2.169.0
新增
TXLSDirectWriterTXLSDirectWriter 现在在流式写入 XLSX 文件时写入工作表超链接,包括外部 URL、mailto 和文件关系、内部工作表位置、显示文本、工具提示、单单元格或多单元格超链接区域、裸 www. URL 规范化、XML 转义以及百分号编码的关系目标,而无需构建完整的工作簿对象模型www
版本 2.168.0
新增
TXLSDirectWriterTXLSDirectWriter 现在在流式写入 XLSX 文件时写入打印和工作表视图元数据,包括网格线和行/列标题显示开关、页边距、奇数页页眉/页脚文本、打印网格线和标题、页面居中、纸张大小和横向方向、适应页面尺寸以及手动行或列分页符,而无需构建完整的工作簿对象模型
版本 2.167.0
新增
TXLSDirectWriterTXLSDirectWriter 现在在流式写入 XLSX 文件时写入工作表布局元数据,包括默认列和行大小、自定义列宽、隐藏的行和列、合并区域、自动筛选区域、冻结窗格、工作表标签颜色以及从右到左的工作表视图,而无需构建完整的工作簿对象模型
版本 2.166.0
新增
- 流式 XLSX 工作流现在包括无需工作表扫描的工作表名称列表、基于名称的行游标工作表选择、原始数字日期流式传输、直接写入器复用、错误单元格写入以及面向数字、字符串、Boolean、日期和错误值的缓存公式结果写入器
版本 2.165.0
修复
TXLSDirectReader.ReadStreamTXLSDirectReader.ReadStream 现在会在直接扫描之后恢复调用方的流位置,与文档记录的流契约保持一致,使应用程序可以在直接读取之后复用同一个流
版本 2.164.0
新增
TDataToXLSTDataToXLS 数据集导出现在支持 IncludeFields 和 ExcludeFields 字符串列表。应用程序可以对导出字段进行白名单处理、省略敏感列,并使标题、数据行、列宽和导出回调与所选字段集保持对齐IncludeFieldsExcludeFields
版本 2.163.0
新增
- CSV 导出在 XLS 和 XLSX 引擎中都增加了可配置的文本引用。 TXLSWorkbook 现在公开 CSVEmitFormulas 和 CSVQuoteAllStrings ,而 TXLSXWorkbook 新增了 CSVQuoteAllStrings 。启用时,公式导出会写入公式文本,字符串字段会被引用,而数字、日期、Boolean、Null 和 Empty 字段则保持正常的引用规则
TXLSWorkbookCSVEmitFormulasCSVQuoteAllStringsTXLSXWorkbookCSVQuoteAllStrings
版本 2.162.0
新增
- XLSX 引擎增加了可中止的进度事件系统。 TXLSXWorkbook 上新增的 OnProgressEx 回调会在现有 OnProgress 之外触发,并带来三项增强:(1)一个 TXLSXProgressState 参数( ppsBegin / ppsWork / ppsEnd )为每个阶段定界,使 UI 知道操作何时开始和结束;(2)一个 Abort: Boolean var 参数允许回调在流式处理过程中取消当前操作 — 读/写/计算循环会检查 Workbook.Aborted 并干净地中断;(3)新增的 xlsxProgressExporting 阶段用于导出操作(HTML/RTF/CSV/ODS)。 FireProgress 辅助方法集中了双回调分发。 FAborted 标志在每个顶层操作(Open / SaveAs / Recalculate)开始时被重置
OnProgressExTXLSXWorkbookOnProgressTXLSXProgressStateppsBeginppsWorkppsEndAbort: BooleanWorkbook.AbortedxlsxProgressExportingFireProgressFAborted
版本 2.161.0
新增
- XLSX 图表模型现在支持四个新的图表元素,以增强与 Excel 的兼容性。 图表数据表 ( c:dTable ): TXLSXChart 新增 ShowDataTable + ShowDataTableKeys 开关 — 启用时写入器会在绘图区内发出数据表元素,使 Excel 将源数据渲染为图表坐标轴下方的网格。 涨跌柱线和高低连线 (股价图/OHLC 图表元素): TXLSXChart 新增 HasUpDownBars + UpDownGapWidth 和 HasHiLowLines — 写入器在图表元素内(折线/股价图)发出 c:upDownBars 和 c:hiLowLines 。 三维视图控件 : TXLSXChart 新增 Rotation3DX / Rotation3DY / Elevation3D / Perspective3D / RightAngleAxes3D — 当任一三维属性与默认值不同时,写入器会在图表级别发出 c:view3D 。此前这些元素都不会被发出,因此使用数据表、股价图元素或三维视图构建的图表会在往返时丢失它们
c:dTableTXLSXChartShowDataTableShowDataTableKeysTXLSXChartHasUpDownBarsUpDownGapWidthHasHiLowLinesc:upDownBarsc:hiLowLinesTXLSXChartRotation3DXRotation3DYElevation3DPerspective3DRightAngleAxes3Dc:view3D
版本 2.160.0
新增
- XLSX 引擎中插入或删除行列时,公式引用现在会自动调整。 ShiftSheetGeometry 方法(由 InsertRows / DeleteRows / InsertCols / DeleteCols 调用)现在会遍历每个幸存的公式单元格并重写其 A1 引用以反映结构变化。新增的 XlsxAdjustFormulaRowColRefs 文本扫描器检测单单元格引用( A1 、 $B$2 )和区域引用( A1:B3 ),将插入点之后的行/列组件位移,并将被删除的引用转换为 #REF! 。相对引用和绝对引用都会被位移(与 Excel 的行为一致)。此前结构编辑后公式会静默地指向错误的单元格
ShiftSheetGeometryInsertRowsDeleteRowsInsertColsDeleteColsXlsxAdjustFormulaRowColRefsA1$B$2A1:B3#REF!
版本 2.159.0
新增
- 自动筛选的排序状态现在可以通过 XLSX 引擎往返。 TXLSXWorksheet 新增了一个 SortStateXml 属性,携带 OOXML <sortState> 元素的原始内部 XML(列排序方向、区分大小写、排序方式以及每个 <sortCondition> 及其降序标志 + ref)。写入器在 <autoFilter> 之后发出该元素;读取器将属性和排序条件解析回来。此前排序状态在读取时被静默丢弃,并且从不被写入
TXLSXWorksheetSortStateXml<sortState><sortCondition><autoFilter> - 中日韩拼音/注音设置现在可以通过 XLSX 引擎往返。 TXLSXWorksheet 新增了 PhoneticFontId 、 PhoneticType (hiragana / katakana / fullWidthKatakana / noConversion)和 PhoneticAlignment (left / center / distributed)。写入器在 <sheetData> 之后发出 <phoneticPr> ;读取器将属性解析回来。此前拼音元素在读取时被静默丢弃 — 日语市场的文件会丢失其振假名阅读辅助设置
TXLSXWorksheetPhoneticFontIdPhoneticTypePhoneticAlignment<phoneticPr><sheetData>
版本 2.158.0
新增
- XLSX 引擎现在可以往返命名单元格样式表( <cellStyles> )。 TXLSXWorkbook 上新增的 TXLSXNamedStyle 类 + TXLSXNamedStyles 集合携带完整的属性: Name 、 XfId 、 BuiltInId 、 CustomBuiltIn 、 Hidden 、 BuiltinLevel 。当集合非空时,写入器为每个条目发出一个 <cellStyle> ;读取器将它们解析回来。此前写入器硬编码了单个 "Normal" 条目,而读取器会丢弃所有命名样式,因此带有“Good”/“Bad”/“Total”/自定义命名样式的文件会在往返时丢失这些名称
<cellStyles>TXLSXNamedStyleTXLSXNamedStylesTXLSXWorkbookNameXfIdBuiltInIdCustomBuiltInHiddenBuiltinLevel<cellStyle>"Normal"
版本 2.157.0
新增
- XLSX 引擎现在可以往返完整的 <calcPr> 元素,而不仅仅是迭代计算开关。 TXLSXWorkbook 新增了 CalcId (Excel 用于判断缓存值是否过时的计算引擎标识符)、 FullCalcOnLoad (强制 Excel 在打开时进行完整重算 — 对于由非 Excel 引擎生成的工作簿至关重要)和 CalcMode (auto / manual / autoNoTable)。写入器在 <calcPr> 上发出匹配的属性;读取器将它们解析回来。此前只处理了 iterate / iterateCount / iterateDelta ,其余的都被静默丢弃
<calcPr>TXLSXWorkbookCalcIdFullCalcOnLoadCalcMode<calcPr>iterateiterateCountiterateDelta
版本 2.156.0
新增
- 公式求值器现在实现了 37 个先前已注册(在 InitFuncHash 中分配了 ptg)但没有调度实现的工作表函数 — 它们会落入 #NAME? 。新实现涵盖五个函数系列: 回归 ( FORECAST 、 LINEST 、 TREND 、 GROWTH 、 LOGEST 、 CORREL 、 PEARSON 、 SLOPE 、 INTERCEPT 、 RSQ 、 STEYX )、 折旧 ( SLN 、 SYD 、 DB 、 DDB 、 VDB )、 描述性统计 ( AVEDEV 、 DEVSQ 、 KURT 、 SKEW 、 GEOMEAN 、 HARMEAN 、 TRIMMEAN 、 FREQUENCY )、 成对数组 ( SUMXMY2 、 SUMX2MY2 、 SUMX2PY2 )以及 组合/数学 ( COMBIN 、 PERMUT 、 FACT 、 QUOTIENT 、 ROMAN 、 DEGREES 、 RADIANS 、 STANDARDIZE )。回归函数使用最小二乘求解器;折旧函数实现了直线法、年数总和法和余额递减法;描述性统计函数计算平均绝对偏差、峰度、偏度、几何/调和/修剪均值;而成对函数计算两个等大小区域之间差值的平方和。 TXLSCalculator 上新增的 CollectRangeValues 辅助方法为统计函数从区域参数中提取数值
#NAME?FORECASTLINESTTRENDGROWTHLOGESTCORRELPEARSONSLOPEINTERCEPTRSQSTEYXSLNSYDDBDDBVDBAVEDEVDEVSQKURTSKEWGEOMEANHARMEANTRIMMEANFREQUENCYSUMXMY2SUMX2MY2SUMX2PY2COMBINPERMUTFACTQUOTIENTROMANDEGREESRADIANSSTANDARDIZECollectRangeValuesTXLSCalculator
版本 2.155.0
新增
- 公式求值器现在支持另外五个统计和工程兼容性名称: ERFC 、 ERFC.PRECISE 、 BINOM.INV 、 CHI.INV.RT 和 F.TEST 。 ERFC 补充了现有的误差函数系列, BINOM.INV 搜索二项分布 CDF 阈值, CHI.INV.RT 别名为右尾卡方反函数,而 F.TEST 返回双尾样本方差 p 值
ERFCERFC.PRECISEBINOM.INVCHI.INV.RTF.TESTERFCBINOM.INVCHI.INV.RTF.TEST
版本 2.154.0
新增
- 公式求值器现在通过 TXLSCalculator 上新增的 OnGetExternalValue 回调解析跨工作簿引用。当三维区域引用指向外部工作簿( [1]Sheet1!A1 )时,求值器会通过回调路由,而不是返回 #REF! 。XLSX 引擎将此回调连接到 GetExternalCellValue ,后者将 SupBook 索引 + 工作表索引映射到匹配的 TXLSXExternalLink 的 <sheetDataSet> 缓存,并按其 OOXML 类型属性(数字 / Boolean / 字符串 / 错误)解码缓存单元格值。此前跨工作簿公式无条件返回 #REF! ;回调基础设施现在允许任何引擎(BIFF8、XLSX 或自定义计算宿主)提供外部值
OnGetExternalValueTXLSCalculator[1]Sheet1!A1#REF!GetExternalCellValueTXLSXExternalLink<sheetDataSet>#REF! - 公式求值器现在对二元运算符( + / - / * / / / ^ )执行逐元素的数组广播。当任一操作数是一维或二维变体数组(例如矩阵函数结果、溢出区域或 CSE 数组操作数)时,运算符会逐元素应用;标量操作数会被广播到数组操作数的每个元素。新增的 ApplyArrayBinaryOp 辅助方法处理形状验证、标量广播和除零传播。遗留的标量算术不变 — 数组路径仅在至少有一个操作数是变体数组时激活
+-*/^ApplyArrayBinaryOp - 公式求值器现在识别 TABLE 函数(What-If 分析数据表)。Excel 将数据表存储为 CSE 数组公式,其主体是 TABLE(rowRef, colRef) ;此前 TABLE 未被识别并落入 #NAME? 。该函数注册了一个合成 ptg( ftabTABLE = 4232 ),因此可以通过 BIFF8 公式编码往返,并在求值时返回占位值(0)— 真实结果由 Excel 预计算并作为缓存单元格值存储,因此 HotXLS 不会重新计算替换逻辑
TABLETABLE(rowRef, colRef)TABLE#NAME?ftabTABLE = 4232
版本 2.153.0
新增
- 数据透视表带类型模型现在携带页轴带类型属性(Hier / Caption / Name)、自动排序作用域以及为了更完整 Excel 兼容性所需的 <formats> 和 <extLst> 原始 XML 往返钩子。 TXLSPivotField 新增 PageHier / PageCaption / PageName (F16 — OLAP 层次结构名称 + 页轴标题 + 显示名称)和 AutoSortScope (F20 — 锁定 Excel 用于自动排序字段项的单元格的 A1 区域引用); TXLSPivotTable 新增 FormatsXml / ExtLstXml (F17 — <formats> 条件格式/数字格式覆盖块和 <extLst> 切片器/时间线/x14 块的原始内部 XML 往返,设置时原样发出,因此即使跨引擎版本往返也是安全的)。XLSX 写入器在结束哨兵之前发出匹配的 <pageField hier=... cap=... name=.../> 属性、 <pivotField> 的 <autoSortScope> 子项以及 <formats> + <extLst> 块
<formats><extLst>TXLSPivotFieldPageHierPageCaptionPageNameAutoSortScopeTXLSPivotTableFormatsXmlExtLstXml<formats><extLst><pageField hier=... cap=... name=.../><autoSortScope><pivotField><formats><extLst> - 公式跟踪器现在记录每一步的操作数栈快照,实现了真正的逐步“公式求值”调试器。 TXLSFormulaStep 新增 StepKind (push / reduce / function)、 StackBefore / StackAfter (每个步骤开始/结束时操作数栈的逗号分隔快照)以及 TokenStart / TokenEnd (将步骤定位回源公式的从 1 开始的字符跨度)。 TXLSFormulaTracer 新增 TraceReversed (以反向求值顺序返回相同的步骤 — 对于从最终结果走向原始操作数的回溯 UI 很有用)和一个 StepCount 属性。此前跟踪器只记录 Depth / Source / Expression / Value,没有栈状态
TXLSFormulaStepStepKindStackBeforeStackAfterTokenStartTokenEndTXLSFormulaTracerTraceReversedStepCount - HTML 导出现在通过 TXLSHTMLExport 上新增的 OnCellImage 回调和新增的 xhImages 选项嵌入每个单元格的图像。当选项被设置且回调被连接时,导出器会向实现者询问每个单元格的 <img> 片段(通常是 Base64 data-URI)并将其追加到单元格文本之后。这将导出器与 XLS 引擎的 BIFF8 图像存储(位于每张工作表的 MsoDrawing 记录中)解耦,因此导出器不必自己解析锚点。XLSX 引擎的 HTML 导出已经嵌入了图像;这弥补了 XLS 引擎的差距
OnCellImageTXLSHTMLExportxhImages<img> - RTF 导入现在将来自 RTF 控制字的字符属性(加粗 / 倾斜 / 下划线 / 删除线 / 大小)应用到目标单元格的字体。 TXLSRTFImport 在整个文档中跟踪 \b / \i / \ul / \strike / \fs ,并在提交时将主导 run 的格式推入单元格的 XF。新增的 ImportCharFormat 属性(默认为 True)切换该行为;设置为 False 可恢复遗留的仅文本导入。多 run 单元格会坍缩为单个 XF(最后一个活动 run 获胜),因为 XLS 引擎的单元格 API 是单元格级别的,而不是按片段的 — 但这远好于丢弃所有格式,而这正是遗留导入器所做的
TXLSRTFImport\b\i\ul\strike\fsImportCharFormat - 新增的 TXLSHTMLImport 类将 HTML 表格解析为工作表单元格。遍历源文件中的第一个 <table> ,为每个 <tr> 发出一行工作表行,为每个 <td> / <th> 发出一个单元格。遵循 colspan / rowspan (Excel 风格合并),去除单元格内的标签(将嵌套格式坍缩为纯文本),解码五个标准字符实体( & / < / > / " / ' / )以及数字 &#NNN; / &#xNN; 形式,并将干净的数字字符串强制转换为 Double,使导入的表格保持可计算。专为 HotXLS 自身产生的输出( SaveAsHTML )加上一般复制粘贴质量的 HTML 表格设计;不是完整的 HTML5 解析器
TXLSHTMLImport<table><tr><td><th>colspanrowspan&<>"' &#NNN;&#xNN;SaveAsHTML
版本 2.152.0
新增
- XLSX 表格现在保留列级别的汇总元数据和表格公式。 TXLSXTable 公开 ColumnTotalsRowFunctions[] 、 ColumnTotalsRowLabels[] 、 ColumnCalculatedColumnFormulas[] 和 ColumnTotalsRowFormulas[] ; SaveAs 发出匹配的 totalsRowFunction 、 totalsRowLabel 、 calculatedColumnFormula 和 totalsRowFormula 表格列 XML, Open 将它们读取回来,而表格克隆会保留它们
TXLSXTableColumnTotalsRowFunctions[]ColumnTotalsRowLabels[]ColumnCalculatedColumnFormulas[]ColumnTotalsRowFormulas[]SaveAstotalsRowFunctiontotalsRowLabelcalculatedColumnFormulatotalsRowFormulaOpen
版本 2.151.0
新增
- 数据透视表带类型模型现在携带每个字段的筛选集合、多选开关、fieldGroup 的 discretePr + groupItems 表面,以及为了更完整数据透视表兼容性所需的计算项/计算成员模型。 TXLSPivotField 新增带类型的 TXLSPivotFilters 集合(每个条目携带跨越 80 成员 OOXML ST_FilterType 枚举的 FilterType — count / percent / sum / caption / value / date 系列 — 加上 Value1 / Value2 / StrValue1 / StrValue2 、 EvalOrder 、 DataField 、 MemberPropertyId 、 Name 、 Description )、一个 MultipleItemSelectionAllowed 开关(F9)和一个 TXLSPivotCalculatedItem 集合(F14)。 TXLSPivotCacheField 新增 DiscreteIndices[] + AddDiscreteIndex 和 GroupItemLabels[] + AddGroupItem 用于 fieldGroup 的 discretePr + groupItems 块(F13)。 TXLSPivotTable 新增 TXLSPivotCalculatedMember 集合(F14)。XLSX 写入器发出匹配的 <pivotField multipleItemSelectionAllowed="1"> 、每个字段的 <filters><filter .../> 块、 <fieldGroup><discretePr>...</discretePr><groupItems>...</groupItems></fieldGroup> 元素、每个字段的 <calculatedItems> 块以及表级别的 <calculatedMembers> 块 — 因此带筛选/多选/分组/计算项的以编程方式构建的数据透视表可以往返
TXLSPivotFieldTXLSPivotFiltersFilterTypeST_FilterTypeValue1Value2StrValue1StrValue2EvalOrderDataFieldMemberPropertyIdNameDescriptionMultipleItemSelectionAllowedTXLSPivotCalculatedItemTXLSPivotCacheFieldDiscreteIndices[]AddDiscreteIndexGroupItemLabels[]AddGroupItemTXLSPivotTableTXLSPivotCalculatedMember<pivotField multipleItemSelectionAllowed="1"><filters><filter .../><fieldGroup><discretePr>...</discretePr><groupItems>...</groupItems></fieldGroup><calculatedItems><calculatedMembers>
版本 2.150.0
新增
- 已定义名称现在会在其引用的工作表被删除或重命名时保持公式文本有效。删除工作表会将已定义名称公式内的每个 SheetN! 限定符重写为 #REF! (与 Excel 的行为一致);重命名工作表会将限定符重写为新名称。此前公式文本会继续指向一个不存在的工作表名称,而 Excel 在重新打开时会将其标记为断开的链接
SheetN!#REF! - 数据透视表带类型模型现在携带字段级别的排序顺序和布局开关,以及为了更完整数据透视表布局兼容性所需的表级别布局/显示属性。 TXLSPivotField 新增 SortType (手动 / 升序 / 降序)、 Compact 、 Outline 、 SubtotalTop 、 DragToRow / DragToCol / DragToPage / DragToData 、 ShowAll 、 InsertBlankRow 、 NumFmtId ; TXLSPivotTable 新增 Compact / CompactData / Outline / OutlineData / Indent / ShowEmptyRow / ShowEmptyCol / ShowHeaders / ShowDrill / EnableDrill / FieldListSortAscending / GridDropZones 加上 RowHeaderCaption / ColHeaderCaption / ErrorCaption / MissingCaption / ShowError / ShowMissing 以及页轴布局对 RowPageCount / ColPageCount 。XLSX 写入器发出匹配的 <pivotField sortType=... compact=... outline=...> 和 <pivotTableDefinition indent=... outline=... showEmptyRow=...> 属性以及 <location rowPageCount=... colPageCount=.../> 元素,因此以编程方式构建的数据透视表携带用户设置的布局,而不是 Excel 的默认值
TXLSPivotFieldSortTypeCompactOutlineSubtotalTopDragToRowDragToColDragToPageDragToDataShowAllInsertBlankRowNumFmtIdTXLSPivotTableCompactCompactDataOutlineOutlineDataIndentShowEmptyRowShowEmptyColShowHeadersShowDrillEnableDrillFieldListSortAscendingGridDropZonesRowHeaderCaptionColHeaderCaptionErrorCaptionMissingCaptionShowErrorShowMissingRowPageCountColPageCount<pivotField sortType=... compact=... outline=...><pivotTableDefinition indent=... outline=... showEmptyRow=...><location rowPageCount=... colPageCount=.../> - TXLSWorkbook 上新增的 FormulaIsVolatile 方法报告某个公式是否会强制在每次计算过程中进行重算 — 即它调用了易失性函数(NOW / RAND / TODAY / OFFSET / INDIRECT)或带有无法解析的引用。该探测与重算引擎使用的依赖提取器共享,因此答案与 Recalculate 实际执行的一致。调用方可以使用它来为验证 UI 标记单元格、在全新工作簿上填充计算链易失性集合,或跳过缓存新输入公式的结果
FormulaIsVolatileTXLSWorkbookRecalculate
版本 2.149.0
新增
- 数据透视表缓存现在可以通过编程方式从其源区域刷新。 TXLSXWorkbook 上新增的 RefreshPivotCache(ACacheId) 方法会重新扫描缓存的源区域,按字段重建共享项域(重新对值去重并重新派生每种类型的边界),并重写每条记录的项索引。此前 HotXLS 依赖硬编码的 refreshOnLoad="1" 标志,并将所有刷新工作推迟到下次打开时由 Excel 完成;编程管道现在可以在进程内刷新
RefreshPivotCache(ACacheId)TXLSXWorkbookrefreshOnLoad="1"
版本 2.148.0
新增
InsertColsXLSX 引擎上的 InsertCols 现在从其左侧邻居继承列宽,与 Excel 对“插入列”的默认行为一致。此前插入的列会采用工作簿默认宽度,在重新打开后产生明显的保真度差距- XLSX 引擎增加了便捷的分级显示折叠辅助方法 ToggleColGrouped / ToggleRowGrouped (位于 TXLSXWorksheet 上),它们会遍历分级显示树并折叠或展开给定级别的组。折叠标志本身已经可以往返;这添加了缺失的遍历树便捷 API
ToggleColGroupedToggleRowGroupedTXLSXWorksheet
版本 2.147.0
新增
- HTML 导出现在作为内部超链接目标的单元格处发出 <a name> 锚点,因此当读者点击时 #SubAddress 超链接能正确解析。此前链接会被发出,但目标没有锚点,因此内部跳转解析为空
<a name>#SubAddress - CSV 导出在 TXLSXWorkbook 上新增了 CSVEmitFormulas 属性。当为 True 时,公式单元格会导出其公式文本( =SUM(A1:A2) ),而不是计算值 — 对于调试和重新导入到不同引擎的管道很有用
CSVEmitFormulasTXLSXWorkbook=SUM(A1:A2) - 外部超链接 URL 现在在写入时进行百分号编码( XlsxEncodeHyperlinkUrl ):空格、尖括号、引号、大括号、管道符、反斜杠、脱字符和反引号在 <Relationship Target="..."/> 属性中被编码为 %XX ,因此文件在每个浏览器中都能正确打开。现有的百分号编码序列( %20 )会被原样保留
XlsxEncodeHyperlinkUrl%XX<Relationship Target="..."/>%20 - 数据透视表样式信息现在携带完整的 pivotTableStyleInfo 表面: TXLSPivotTable 上的 StyleName 、 ShowRowHeaders 、 ShowColHeaders 、 ShowRowStripes 、 ShowColStripes 、 ShowLastColumn 。XLSX 写入器发出匹配的元素,因此以编程方式构建的数据透视表携带用户选择的镶边样式,而不是硬编码的默认值
pivotTableStyleInfoStyleNameShowRowHeadersShowColHeadersShowRowStripesShowColStripesShowLastColumnTXLSPivotTable - TXLSXWorkbook 上新增的 CalculateAndVerify 方法会重新求值每个公式单元格,并将计算结果与单元格的缓存值进行比较。返回不匹配的计数(0 = 所有缓存值与引擎的新鲜计算一致;易失性公式被排除)。对于在不同引擎之间移植工作簿或验证写入器是否损坏缓存值时的质量保证很有用
CalculateAndVerifyTXLSXWorkbook
版本 2.146.0
新增
- XLSX 引擎现在支持迭代循环引用计算(Excel 的迭代计算模式)。 TXLSXWorkbook 上新增的 Iterate / IterateCount / IterateDelta 属性三元组控制该行为:当 Iterate=True 且在 Recalculate 期间检测到引用循环时,引擎会将循环成员单元格重新求值最多 IterateCount 次(默认为 100)或直到每个单元格的变化 < IterateDelta (默认为 0.001),而不是返回 #REF! 。这些设置通过 OOXML 的 <calcPr iterate="1" iterateCount="N" iterateDelta="X"/> 元素往返。带有故意循环引用(利息生利息、循环分配)的财务模型现在会收敛而不是报错
IterateIterateCountIterateDeltaTXLSXWorkbookIterate=TrueRecalculateIterateCount< IterateDelta#REF!<calcPr iterate="1" iterateCount="N" iterateDelta="X"/> - 数据透视表缓存字段现在为数字范围和日期层次结构分组携带一个分组模型。 TXLSPivotCacheField 新增 HasGroup + GroupStartNum / GroupEndNum / GroupInterval (数字范围)和 GroupByDate / GroupDays / GroupMonths / GroupQuarters / GroupYears / GroupHours / GroupMinutes / GroupSeconds / GroupStartDate / GroupEndDate (日期)。XLSX 写入器发出 <fieldGroup><rangePr groupBy="range|days|months|..."/> 元素,因此带有分组字段的以编程方式构建的数据透视表与 Excel 的输出匹配
TXLSPivotCacheFieldHasGroupGroupStartNumGroupEndNumGroupIntervalGroupByDateGroupDaysGroupMonthsGroupQuartersGroupYearsGroupHoursGroupMinutesGroupSecondsGroupStartDateGroupEndDate<fieldGroup><rangePr groupBy="range|days|months|..."/> - HTML 导出现在发出批注尾注。当导出选项中包含 xhComments 时,每个有批注的单元格都会获得一个 [n] 上标链接,而完整的批注文本(作者 + 正文)在表格之后作为尾注部分列出,并带有指向单元格的反向锚点。此前批注只能通过单元格的 title= 属性获得,该属性在打印或复制粘贴时不可见
xhComments[n]title=
版本 2.145.0
新增
- BIFF8 公式错误字面量( tErr 标记)现在解码为带类型的 SA_ERROR 语法项,而不是导致公式解析失败。存储 =#N/A (或七个 Excel 错误常量中的任何一个)的单元格此前会导致整个公式在读取时被丢弃;现在错误字节通过读取 -> 求值 -> 写入往返,并通过新增的 XlsErrorToString 辅助方法重建为其文本形式( #NULL! 、 #DIV/0! 、 #VALUE! 、 #REF! 、 #NAME? 、 #NUM! 、 #N/A )
tErrSA_ERROR=#N/A#NULL!#DIV/0!#VALUE!#REF!#NAME?#NUM!#N/AXlsErrorToString - BIFF8 tIsect $0F 标记(隐式交集运算符)现在在二进制公式翻译器中解码,构建与文本解析器为 @ 产生的相同的 SA_ISECT 节点。此前包含 tIsect 的二进制公式会解析失败
tIsect $0FSA_ISECT@tIsect - 当模型携带任何非默认 x14 字段(负填充颜色、渐变关闭、轴颜色、方向、边框)时,数据条条件格式现在会在工作表 extLst 中发出 Excel 2010+ x14 扩展块。新增的 BuildDataBarExtXml 构建带有匹配优先级、cfvo 对、填充 + 负值 + 轴颜色以及渐变/边框/方向/negativeBarColorSameAsPositive 属性的 <x14:conditionalFormattings> ext 元素
x14extLstBuildDataBarExtXml<x14:conditionalFormattings>ext
版本 2.144.0
新增
- XLSX 引擎现在可以 写入 Agile 加密工作簿( TXLSXWorkbook.SaveAsEncryptedAgile ),弥补了一个高价值的读/写兼容性差距。Agile 是 Excel 2010+ 为受密码保护的 .xlsx 文件默认写入的格式;HotXLS 此前可以读取 Agile,但只能写入标准加密(AES-128)。新的写入管道镜像了现有的解密路径:使用 100000 次迭代旋转计数的 SHA-512 密码哈希、AES-256-CBC 分段包加密、按三个规范固定的块密钥包装的随机生成的中间密钥,以及携带加密验证器 + 密钥 blob 的完整 <encryption> 描述符 XML。输出与 Excel 产生的内容字节保真,并通过 XlsLoadAgileEncryptedFile 干净地往返(已通过测试验证:正确密码解密,错误密码被拒绝)
TXLSXWorkbook.SaveAsEncryptedAgile<encryption>XlsLoadAgileEncryptedFile - 新的加密原语支撑了 Agile 写入路径: XlsHMACSHA512 (RFC 2104, dataIntegrity 元素所需)、 XlsBase64Encode (RFC 4648 编码器,镜像现有解码器)和 AESEncryptCBC (用于任何密钥大小 128/192/256 的 AES-CBC 加密,是现有 AESDecryptCBC 的逆操作)。AES 单元现在从 Gladman obj 导入 aes_encrypt_key192 / aes_encrypt_key256 (此前仅有 128 位加密可用)
XlsHMACSHA512dataIntegrityXlsBase64EncodeAESEncryptCBCAESDecryptCBCaes_encrypt_key192aes_encrypt_key256
版本 2.143.0
新增
- 公式求值器现在解析并求值显式交集运算符 @ (Excel 365 动态数组语法,例如 =A2:A4 @ B2:B4 )。词法分析器为 @ 符号发出新的 LT_ISECT 标记,优先级解析器构建 SA_ISECT 节点(绑定比 ^ 更紧,比 % 更松),而新增的 IntersectRanges 求值器将两个操作数作为区域解析,并返回单个交叉单元格的值 — 即 Excel 的隐式交集规则。BIFF 标记序列化器发出 tIsect $0F ,因此运算符通过 XLS 往返,而公式文本重建路径发出隐式空格形式。此前此类公式解析失败
@=A2:A4 @ B2:B4LT_ISECT@SA_ISECT^%IntersectRangestIsect $0F - 现在提供了一个标准的 Base64 编码器( XlsBase64Encode ),镜像现有的 XlsBase64Decode 。这是 Agile 加密写入路径的先决条件,该路径将 saltValue / encryptedVerifierHashInput / encryptedKeyValue / encryptedHmacValue 作为 Base64 属性值发出
XlsBase64EncodeXlsBase64Decode - 工作簿的 OnProgress 事件现在也会在完整重算( Recalculate )期间触发,带有新的 xlsxProgressCalculating 阶段。此前该事件只在读取和写入期间触发,因此漫长的完整重算不会给 UI 任何心跳。该事件大约每 4% 的单元格触发一次,以避免泛滥
OnProgressRecalculatexlsxProgressCalculating - 扩展文档属性( docProps/app.xml )现在为受密码保护/基于模板的文档往返 Excel 写入的另外三个字段: Manager 、 Template 和 DocSecurity (一个位字段:1=受密码保护,2=建议只读,4=强制只读,8=锁定以供批注)
docProps/app.xmlManagerTemplateDocSecurity
版本 2.142.0
新增
- 数据透视表带类型模型现在携带上一轮分析标记为差距的元数据、源、计算字段、“显示值方式”和共享项边界表面。 TXLSPivotCache 新增 RefreshOnLoad / RefreshedBy / RefreshedDate / MissingItemsLimit / CreatedVersion / RefreshedVersion / MinRefreshableVersion / EnableRefresh / BackgroundQuery / SaveData 加上带类型的工作表源形状( SourceName / SourceRelId / SourceIsNamedRange ); TXLSPivotCacheField 新增 Formula / DatabaseField / MemberPropertyField (计算字段)和共享项边界( ContainsBlank / ContainsInteger / ContainsString / ContainsNumber / ContainsDate / MinValue / MaxValue / MinDate / MaxDate / HasBounds ); TXLSPivotDataField 新增 ShowDataAs / BaseField / BaseItem 用于“显示值方式”转换(百分比/差异/运行总计/索引)。XLSX 写入器( BuildPivotCacheDefinitionXml / BuildPivotTableXml )遵循所有这些属性,因此以编程方式构建的数据透视表( AddPivotTable )会发出更丰富的 pivotCacheDefinition + pivotTableDefinition — refreshOnLoad / 版本三元组 / refreshedBy / 命名区域源 / 计算 cacheField 公式 / sharedItems 边界 / dataField 小计 + showDataAs。从文件读取的数据透视表继续原样往返其原始 XML
TXLSPivotCacheRefreshOnLoadRefreshedByRefreshedDateMissingItemsLimitCreatedVersionRefreshedVersionMinRefreshableVersionEnableRefreshBackgroundQuerySaveDataSourceNameSourceRelIdSourceIsNamedRangeTXLSPivotCacheFieldFormulaDatabaseFieldMemberPropertyFieldContainsBlankContainsIntegerContainsStringContainsNumberContainsDateMinValueMaxValueMinDateMaxDateHasBoundsTXLSPivotDataFieldShowDataAsBaseFieldBaseItemBuildPivotCacheDefinitionXmlBuildPivotTableXmlAddPivotTablepivotCacheDefinitionpivotTableDefinition - 图像锚点行为现在通过 TXLSXImage 上新增的 AnchorType 属性往返( xaTwoCell = 随单元格移动和调整大小, xaOneCell = 移动但不调整大小, xaAbsolute = 不移动或调整大小)。写入器选择锚点元素( xdr:oneCellAnchor / xdr:twoCellAnchor editAs=... / xdr:absoluteAnchor )进行匹配;读取器将元素名称 + editAs 属性解析回来。映射到 Excel 的右键 -> 大小和属性 -> 属性对话框
AnchorTypeTXLSXImagexaTwoCellxaOneCellxaAbsolutexdr:oneCellAnchorxdr:twoCellAnchor editAs=...xdr:absoluteAnchoreditAs - 页眉页脚现在可以往返偶数/首页区分。 TXLSXWorksheet 新增 EvenHeaderText / EvenFooterText / FirstHeaderText / FirstFooterText 加上四个 <headerFooter> 开关( DifferentOddEven 、 DifferentFirst 、 ScaleWithDoc 、 AlignWithMargins )。用户启用了“区分奇偶页”或“首页不同”的文件不再会在往返时丢失偶数/首页部分
TXLSXWorksheetEvenHeaderTextEvenFooterTextFirstHeaderTextFirstFooterText<headerFooter>DifferentOddEvenDifferentFirstScaleWithDocAlignWithMargins - 页面设置现在为非默认打印设置往返 Excel 写入的扩展 <pageSetup> 属性: Copies 、 FirstPageNumber + UseFirstPageNumber 、 HorizontalDpi 、 VerticalDpi 、 PrintErrors (显示/空白/破折号/NA)、 UsePrinterDefaults
<pageSetup>CopiesFirstPageNumberUseFirstPageNumberHorizontalDpiVerticalDpiPrintErrorsUsePrinterDefaults <sheetFormatPr><sheetFormatPr> 现在往返 customHeight 、 zeroHeight 、 outlineLevelRow 和 outlineLevelCol ,因此用户设置了用户固定的默认行高、隐藏默认行或默认分级显示级别的文件不再会丢失该行为customHeightzeroHeightoutlineLevelRowoutlineLevelCol- 数据条条件格式往返标准 gradient 属性(渐变与实心填充),并且 TXLSDataBarSpec 在模型上新增 Excel 2010+ x14 扩展字段( NegativeBarColor 、 NegativeBarColorSameAsPositive 、 GradientFill 、带主题/色调的 AxisColor 、 Direction 、 Border ),以便 API 消费者可以设置它们
gradientTXLSDataBarSpecx14NegativeBarColorNegativeBarColorSameAsPositiveGradientFillAxisColorDirectionBorder - 批注气球原样往返其 VML 绘图。读取器原样捕获 xl/drawings/vmlDrawingN.vml ,写入器在保存时重放它(而不是内置的黄色气球模板),因此每个气球的用户设置位置/大小/填充颜色/可见性得以保留
xl/drawings/vmlDrawingN.vml - 批注正文往返每个 run 的格式。 TXLSXComment 新增一个惰性 RichText: TXLSXRichText 负载(复用共享字符串 run 模型);当 RichText 携带格式时,写入器为每个 run 发出一个 <r><rPr>...</rPr><t>...</t></r> ,而读取器将 <b/> 、 <i/> 、 <sz val=N/> 、 <color rgb=.../> 解析回来,因此加粗/倾斜/大小/颜色得以保留
TXLSXCommentRichText: TXLSXRichText<r><rPr>...</rPr><t>...</t></r><b/><i/><sz val=N/><color rgb=.../> - 公式求值器现在实现了 SUBTOTAL (全部 11 个聚合器:AVERAGE / COUNT / COUNTA / MAX / MIN / PRODUCT / STDEV / STDEVP / SUM / VAR / VARP,加上 101-111 忽略隐藏变体)和 AGGREGATE (19 个聚合器,带有选择错误/隐藏跳过的选项代码 0-7 标志,包括带有其 k 参数的 LARGE / SMALL / MEDIAN / PERCENTILE / QUARTILE 系列)。两者此前都落入不支持的函数路径; SUBTOTAL 已注册但没有实现, AGGREGATE 根本未注册
SUBTOTALAGGREGATEkSUBTOTALAGGREGATE - CELL 和 INFO 工作表函数现在被求值: CELL 支持 address 、 col 、 row 、 type 、 contents 、 filename 、 format ,而 GUI 状态 info_type ( color 、 parentheses 、 prefix 、 protect 、 width )返回中性默认值; INFO 支持 osversion 、 system 、 recalc 、 memavail 、 numfile 、 release 、 origin 。两者都已注册但落入 #NAME?
CELLINFOCELLaddresscolrowtypecontentsfilenameformatinfo_typecolorparenthesesprefixprotectwidthINFOosversionsystemrecalcmemavailnumfilereleaseorigin#NAME? - 条件格式现在往返 stopIfTrue 、 stdDev 、 equalAverage 和 timePeriod cfRule 属性,加上完整的 10 成员 timePeriod 系列(昨天 / 今天 / 明天 / 最近 7 天 / 上周 / 本周 / 下周 / 上月 / 本月 / 下月)。这些在读取时被静默丢弃;Excel 在高于平均值的规则和日期带规则上经常写入它们,而丢弃它们会改变规则在重新打开时重新求值的方式
stopIfTruestdDevequalAveragetimePeriodcfRuletimePeriod - CSV 导出在 TXLSCSVSaver 上新增了 TXLSCsvEncoding 属性,有三种模式: ceSystemAnsi (遗留默认值)、 ceUtf16 (历史 Unicode 模式)和 ceUtf8 ,后者写入带有 EF BB BF 字节顺序标记的 UTF-8 文件 — 现代的 Excel 友好默认值,可在任何区域设置上无需文本导入向导即可重新打开
TXLSCsvEncodingTXLSCSVSaverceSystemAnsiceUtf16ceUtf8 - CSV 导入在 TXLSCSVLoader 上新增了 LocaleTolerantNumbers 属性。启用时,无法以 . 作为小数分隔符解析的数字字段会以 , 重试(反之亦然),因此欧洲的 3,14 在美国机器上导入为数字 3.14。严格模式(默认)不变,因此带前导零的文本、邮政编码和其他带逗号的标记保持为文本
LocaleTolerantNumbersTXLSCSVLoader.,3,14
修复
- XLSX 引擎的严格模式数字推断不再通过 Delphi 的 TryStrToFloat 将带逗号的文本字段(例如 3,14 )强制转换为数字,后者即使将 ThousandSeparator 设置为 #0 也会容忍逗号作为千位分隔符。此类字段现在保持为文本,除非启用了新的 LocaleTolerantNumbers 选项
3,14TryStrToFloatThousandSeparator#0LocaleTolerantNumbers
版本 2.140.0
更改
- XLSX 引擎现在在每次保存之前压缩其六个按属性样式池(Fonts / Fills / Borders / NumberFormats / Alignments / Protections):新增的 CompactStylePools 过程会扫描每个单元格的样式索引,并丢弃不再被任何单元格引用的池条目 — 即当单元格被清除、删除或在池条目首次添加后重新设置样式时累积的条目。压缩后的池在输出文件中产生更小的 <cellXfs> 表(对于经过多次编辑周期的文档通常小 30-70%),与 XLS 引擎已经通过 CreateAllReferredList 执行的压缩相匹配
CompactStylePools<cellXfs>CreateAllReferredList
版本 2.139.0
新增
- 绘图层形状、连接符、组合形状和非图表图形框现在原样往返:当 XLSX 读取器遇到带类型模型(图像/图表/文本框)未覆盖的 <xdr:sp> 、 <xdr:cxnSp> 、 <xdr:grpSp> 或非图表 <xdr:graphicFrame> 锚点时,它会捕获完整的锚点 XML 并在保存时原样重放 — 因此在 Excel 中创作的绘图(箭头、标注、组合形状、智能图框)能无损地通过读取->写入周期。每个工作表公开 RawDrawingAnchorCount / RawDrawingAnchor(i) 以供检查
<xdr:sp><xdr:cxnSp><xdr:grpSp><xdr:graphicFrame>RawDrawingAnchorCountRawDrawingAnchor(i)
版本 2.138.0
新增
- 外部链接缓存单元格值现在在 XLSX 引擎上往返:新增的 TXLSXExternalCell / TXLSXExternalRow / TXLSXExternalSheetData 模型通过 AddSheetData / AddRow / AddCell 挂在每个 TXLSXExternalLink 上,写入器在 externalLinkN.xml 内部发出匹配的 <sheetDataSet> 块,重新打开会恢复每个缓存值。 FindCachedCell(sheetIdx, row, col) 查找外部引用单元格的最后已知值 — 即当远程工作簿离线时 Excel 自身显示的数据
TXLSXExternalCellTXLSXExternalRowTXLSXExternalSheetDataTXLSXExternalLinkAddSheetDataAddRowAddCell<sheetDataSet>externalLinkN.xmlFindCachedCell(sheetIdx, row, col)
版本 2.137.0
新增
- OOXML cellXf quotePrefix 标志 — Excel 用于将存储文本标记为字面量以使其免受数字强制转换的机制(CSV 导入的代码如 00123 、长账号、任何用户用撇号作为前缀的内容) — 现在在 XLSX 引擎上往返: TXLSXAlignment 新增 QuotePrefix 属性,对齐池去重对其进行计数,写入器在匹配的 <xf> 上发出 quotePrefix="1" ,并且重新打开会恢复它,无论 cellXf 携带子 <alignment/> 还是裸的自闭合 <xf quotePrefix="1"/>
quotePrefix00123TXLSXAlignmentQuotePrefixquotePrefix="1"<xf><alignment/><xf quotePrefix="1"/>
版本 2.136.0
新增
- 图表坐标轴现在完全可编程:每个图表的 CategoryAxis 和 ValueAxis 上新增的 TXLSXChartAxis 模型公开 LogBase (对数刻度,例如 10 表示以 10 为底的对数)、 Orientation (正常 / 反转)、 MajorGridlines / MinorGridlines 、 MinValue / MaxValue (NaN = 自动)、 MajorUnit / MinorUnit 、 CrossesAt 、 TickLblPos 和 DispUnits (显示单位:百 / 千 / 百万 / 十亿 / 万亿)。所有属性都默认为 Excel 的自动行为,因此现有图表会发出与之前相同的 XML;写入器仅在调用方设置非默认值时才会添加 <c:logBase> 、 <c:orientation> 、 <c:majorGridlines> 、 <c:majorUnit> 、 <c:crossesAt> 、 <c:tickLblPos> 和 <c:dispUnits> ,并且重新打开此类图表会恢复每个设置
TXLSXChartAxisCategoryAxisValueAxisLogBaseOrientationMajorGridlinesMinorGridlinesMinValueMaxValueMajorUnitMinorUnitCrossesAtTickLblPosDispUnits<c:logBase><c:orientation><c:majorGridlines><c:majorUnit><c:crossesAt><c:tickLblPos><c:dispUnits>
版本 2.135.0
新增
- 图表误差线现在可编程并可在 XLSX 引擎上往返:每个 TXLSXChartSeries 新增 AddErrorBar(dir) ,返回一个 TXLSXChartErrBar ,带有 ValueType (fixed / percentage / stdDev / stdErr / custom)、 Value 、 PlusValue / MinusValue (custom)和 NoEndCap ;每个方向(X / Y)存储一个误差线槽位,写入器发出匹配的 <c:errBars> 块,重新打开会恢复方向、类型和量级,使科学/工程图表保留其不确定性指示器
TXLSXChartSeriesAddErrorBar(dir)TXLSXChartErrBarValueTypeValuePlusValueMinusValueNoEndCap<c:errBars>
版本 2.134.0
新增
- 图表数据标签现在可编程并可在 XLSX 引擎上往返:每个 TXLSXChartSeries 新增 ShowValue 、 ShowCategoryName 、 ShowSeriesName 、 ShowLegendKey 、 ShowPercent 、 ShowBubbleSize 和 Separator 属性,发出匹配的 <c:dLbls> 块及其 <c:show*/> 子项;重新打开此类图表会恢复这些开关,使“显示值”/“显示百分比”设置在保存-编辑-保存周期中得以保留
TXLSXChartSeriesShowValueShowCategoryNameShowSeriesNameShowLegendKeyShowPercentShowBubbleSizeSeparator<c:dLbls><c:show*/>
版本 2.133.0
新增
- XLSX 引擎现在原生支持矢量图像格式 EMF 和 WMF: TXLSXImageFormat 新增了 xlsxImageEmf / xlsxImageWmf ,写入器会生成匹配的 image/x-emf / image/x-wmf 内容类型以及 .emf / .wmf 扩展名,并且格式探测器能够识别 EMF( 01 00 00 73 )、可放置的 WMF( D7 CD C6 9A )以及标准 WMF 文件头 —— 这样从 Word 或 PowerPoint 粘贴且被 Excel 嵌入为矢量数据的图像现在可以正常往返读写,而不会被丢弃
TXLSXImageFormatxlsxImageEmfxlsxImageWmfimage/x-emfimage/x-wmf.emf.wmf01 00 00 73D7 CD C6 9A
修复
- GELFRAME 记录( $1066 )跨越 8224 字节继续边界的 BIFF8 图表子流不再丢失填充或线条几何图形:读取器现在接受 GELFRAME 自继续(Excel 会写入另一个 $1066 而不是标准的 $003C CONTINUE),并且还允许标准 CONTINUE 记录在图表上下文中进行拼接,从而匹配写入器现有的多块分发机制
$1066$1066$003C - 数据负载跨越继续记录的 BIFF8 页眉/页脚背景图片( $0866 )不再损坏:每个继续段都会重复一个 14 字节的 MSO 文件头,读取器现在会在拼接前将其剥离,从而嵌入的图像数据不再因每个段而偏移 14 字节
$0866
版本 2.132.19
修复
- 传统 XLS 和加密 XLSX 存储清理现在会确定性地释放复合文件流,防止临时文件在保存、加载、VBA 或加密包操作后保持锁定状态
- 扩展整数变体值的格式化显示现在一致应用所请求的数字格式,与标准整数值的现有行为匹配
- 共享字符串、数据验证、图表工作表、ZIP 存档、PNG 绘图和重复文本公式现在在错误路径和大型文本操作期间以更具防御性的方式清理临时缓冲区
版本 2.132.18
修复
- 内部字符串构建器的值分配在分配空字符串时现在会清除先前的文本,防止重用的 XML 和文本缓冲区保留过期内容
版本 2.132.17
修复
- XLS 图表工作表创建现在接受包含感叹号的带引号源工作表名称,在超大行引用折绕为有效的 BIFF 行之前予以拒绝,并将趋势线图例名称限制在 BIFF 短文本限制内,以确保生成的图表记录保持良好格式
版本 2.132.16
修复
- 内部字符串键和对象键列表在现有槽位被覆盖时现在会删除过期的查找键,防止旧键解析为替换条目
- 内部对象列表替换和转换后的唯一键缓存现在在覆盖、清空和销毁时释放拥有的条目,防止在重复的工作簿和样式操作期间发生泄漏
版本 2.132.15
修复
- 直接 XLSX 流式读取现在可以解码存储 true 和 false 等 OOXML 字面量值的布尔单元格
- 内部字符串列表索引更新在现有槽位被覆盖时现在会删除过期的键,防止旧名称解析为新值
版本 2.132.14
修复
- 第一个字符为 NUL 的 BIFF8 数据验证提示和错误消息现在可以保留记录边界,而不会写入不匹配的 DV 长度
版本 2.132.13
修复
- XML 文本解析现在拒绝嵌套的实体开头(如 &&),而不是静默丢弃未完成的实体
- 反编译公式现在使用固定的小数点分隔符写入数值常量,以确保公式文本在不同区域设置之间保持可移植性
版本 2.132.12
修复
- 调色板 PNG 透明度现在会忽略图像调色板中不存在的透明色,而不是将任意调色板索引标记为透明
- SUMPRODUCT 公式在长范围参数中遇到首个超出已用范围的行后现在会停止扫描剩余的行,从而在保留计算结果的同时避免不必要的单元格读取
版本 2.132.11
修复
- TEXT 公式在无法应用无效或超大的数字格式时现在会返回 #VALUE!,而不是被吞掉作为空白的成功结果
- 共享字符串表截断现在会释放正确的尾部数据块,并在大型删除循环后保持表的可重用性
版本 2.132.10
修复
- MATCH 精确查找现在支持 Excel 通配符,并且经典 XLS 行偏移元数据现在会忽略块外行,而不是损坏已保存的工作簿结构
- 如果数据块处理抛出异常,PNG 压缩文本元数据现在会安全地释放临时缓冲区
版本 2.132.9
修复
- PNG 压缩文本元数据、数据块列表插入以及 CRC 字节顺序处理现在在受支持的 Windows 平台之间保持稳定
版本 2.132.8
修复
- LEFT 和 RIGHT 公式在 num_chars 无法转换为有效整数时现在会报告 #VALUE!
版本 2.132.7
修复
- SEARCH 公式现在支持 Excel 风格的 ?、* 和 ~ 通配符
- 工作表名称验证在重命名工作表时现在会拒绝无效的 Excel 工作表名称字符
- 手动分页符删除现在在现有分页符之前插入分页符后可正常工作
版本 2.132.6
修复
- DATE 公式现在匹配兼容 Excel 的月份和日期滚动行为,包括类似于 DATE(2008,14,2) 的调用
- 列范围 Hidden 读取现在报告每列的可见性,而不是混入行可见性状态
- Excel 97-2003 行限制下的 BIFF 行元数据现在可正确加载,从而保留第 65536 行的设置
版本 2.132.5
修复
- BIFF 工作簿加载现在可容忍畸形的工作表标签颜色、截断的透视表标签以及无效的透视表缓存日期片段,而不会引发异常
- 工作簿包和流加载现在可以更一致地清理失败的存档和存储设置路径,从而在输入畸形或基于流的存储打开失败时避免泄漏资源
版本 2.132.4
修复
- ZIP 存档处理在为另一个包重用相同的存档对象之前现在会完成当前的包,并且基于文件的存档打开现在允许并发共享读取器
版本 2.132.3
修复
- 工作簿包写入现在使用 UTF-8 元数据保留非 ASCII 码 ZIP 条目名称,防止包部分名称包含 Unicode 文本时出现乱码
- XML 输出在禁用转义时现在会将原始文本和属性值写入为 UTF-8 字节,与声明的文档编码匹配
- 公式评估在回调异常后现在会清除其进行中状态,并在 Unicode Delphi 构建上正确处理大数取消
- 数组公式矩阵提取现在遵守非零 Variant 数组下界,而不是对有效的基于 1 的数组引发异常
版本 2.132.2
更改
- 范围排序现在对大型排序范围使用稳定的 O(n log n) 排序传递,同时保留现有行内容的往返行为
- ODS 和 XLSX 数值解析与格式化现在会重用固定格式化状态,而不是在热路径中重复创建它
修复
- XML 解析现在接受有效的 CDATA 块和 UTF-8 处理指令,而不会损坏文本或在有效的标记上失败
- 公式解析现在接受带符号的科学计数法,并干净地拒绝畸形或截断的公式字节
- 经典工作簿打开和保存路径在出错后现在会可靠地释放流和存储,防止临时文件保持锁定状态
- 二进制缓冲区处理现在会验证复制 和读取边界,在复制前增长目标缓冲区,并干净地拒绝畸形的 VBA 压缩回引
版本 2.132.1
修复
- 纠正了加密工作簿使用不受支持的加密方案时引发的错误消息:此前它声称无法读取 ECMA-376 灵活加密(Agile Encryption),尽管自 2.119.0 以来已支持灵活解密(AES-128/192/256),该消息现在列出了实际支持的方案
- Open 在拒绝加密的 OOXML 包时,现在会将调用者指向 TXLSXWorkbook.OpenEncrypted,而不是声明不支持加密工作簿
版本 2.132.0
更改
- XLSX 加载速度显著加快:XML 读取器现在会保留重复的元素名称,并直接从其扫描缓冲区转换文本和属性值,从而将每个单元格的内存分配减少了一半以上;多线程打开(2.128.0)受益最大 —— 移除的分配是那些串行化工作线程的分配 —— 使得多工作表工作簿在多核机器上的打开速度现在接近单线程路径的两倍,单线程打开也提升了百分之几
版本 2.131.0
新增
- HotXLS 未建模的工作表扩展块 —— 即由 Excel 为 x14 条件格式或切片器等功能写入的工作表 <ext> 中除了迷你图(sparklines)之外的 <extLst> 项 —— 现在在打开工作簿时会原样保留并在保存时写回,因此打开并重新保存文件不再剥离这些扩展;捕获的块通过 Worksheet.RawWorksheetExts 呈只读形式可见,并在工作表复制到另一个工作簿时随工作表一起移动
<ext><extLst>Worksheet.RawWorksheetExts
版本 2.130.0
新增
- 包含公式的已保存工作簿现在带有 xl/calcChain.xml 计算链部分,允许 Excel 从记录的顺序中加载其依赖引擎,而不是在加载时重建它;在调用 Recalculate 后,该链遵循依赖图的拓扑顺序,否则公式单元格以文档顺序列出(Excel 会在运行中细化该有效提示),该部分、其内容类型以及其工作簿关系会一起发出并在打开/保存往返中保留下来
xl/calcChain.xmlRecalculate
版本 2.129.0
新增
- 新增的 Workbook.ParallelParseThreads 属性可调节 2.128.0 中引入的多线程 Open 路径的工作线程数(0 = 自动,每个 CPU 核心一个工作线程);工作表解析会进行大量内存分配,且内存分配在线程之间是串行化的,因此在某些工作负载上,较小的显式上限与全核心数性能相当甚至更好,该属性允许集成商选择最适合其文件的设置
Workbook.ParallelParseThreads
版本 2.128.0
新增
- 多线程 XLSX 加载:打开工作簿现在会在工作线程上解析每个工作表的 XML(这是大型文件上的主要开销),因此多工作表工作簿在多核机器上打开速度更快;工作表部分预先从包中提取,每个工作线程只处理其自身的工作表,因此加载的工作簿与串行结果完全一致
- 新的 Workbook.ParallelParse 属性(默认为 True )在 Open 之前设置为 False 时会切换回单线程解析 —— 这是针对受限环境的单行选择退出方式
Workbook.ParallelParseTrueFalseOpen
更改
- 读取回调 OnProgress 仍在调用线程上针对每个工作表触发一次,现在是在分派每个工作表进行解析时触发,而不是严格在工作表之间触发
OnProgress
版本 2.127.0
新增
- XLSX 引擎上的增量重新计算:新的 Workbook.Recalculate 方法构建公式依赖图,按照依赖顺序计算每个公式单元格一次,并将各个结果存储在单元格的缓存值中;后续调用仅重新计算自上次传递以来受值更改影响的单元格 —— 在链式模型(财务工作表、报告级联)上,编辑一个输入仅重新计算其下游公式,而不是整个工作簿
Workbook.Recalculate - 易失性函数( NOW 、 TODAY 、 RAND 、 OFFSET 、 INDIRECT )以及无法静态解析其引用的公式(多区域名称、外部工作簿)会在每次传递中重新计算 —— 引擎宁愿过度计算也不愿冒得到过期结果的风险
NOWTODAYRANDOFFSETINDIRECT - 检测引用循环而不是死循环:在公式形成循环链时, Recalculate 会返回错误代码,跳过循环成员,并仍计算循环外的每个公式;跨工作表引用、命名范围和 CSE 数组公式(在锚定范围上溢出的结果)完全参与依赖图
Recalculate
更改
- 现有的按需 Calculate 路径保持不变; Recalculate 是一个独立的、选择性加入的 API,从未调用它的工作簿其行为与以前完全相同
CalculateRecalculate
版本 2.126.0
新增
- XLSX 引擎上的迷你图:工作表现在带有迷你图组 —— 即 Excel 根据数据范围渲染的单元格内迷你图 —— 包含三种 Excel 类型(折线图、柱形图、盈亏图);可以使用 Worksheet.AddSparklineGroup 创建迷你图组,或通过新的 Worksheet.SparklineGroups 集合手动构建组,为每个组添加任意数量的迷你图,每个迷你图各有一个源范围和一个显示单元格
Worksheet.AddSparklineGroupWorksheet.SparklineGroups - 迷你图组公开了 Excel 提供的完整选项集:线宽、数据点标记、高/低/负/首/尾点强调切换开关、八个 ARGB 颜色槽(系列、负点、坐标轴、标记、首点、尾点、高点、低点)、每组或每迷你图的垂直轴缩放,以及针对空源单元格的空缺值/零值/跨度处理
- 迷你图在完整的保存→打开往返中保留下来:保存时会发出工作表 extLst 扩展块([MS-XLSX] §2.3.6)以便 Excel 2010 及更高版本渲染迷你图,并且打开此类工作簿 —— 无论是由 HotXLS 还是 Excel 编写 —— 都会重建每个组、选项和范围,以便在编辑周期中持久保留;将工作表复制到另一个工作簿也会克隆其迷你图组
extLst
版本 2.125.0
新增
- 来自 XLSSuit 差距分析的七个 DBCS 字节计数文本函数现在在两个引擎上均可计算: LEFTB 、 RIGHTB 、 MIDB 、 LENB 、 FINDB 、 SEARCHB 和 REPLACEB ;每个函数在系统 ANSI 代码页下将其输入视为字节字符串,因此 CJK(中日韩)字符占用 2 字节,而 ASCII 占用 1 字节,会拆分 DBCS 导前/导尾字节对的操作会回缩至最近的字符边界,匹配 Excel 的行为
LEFTBRIGHTBMIDBLENBFINDBSEARCHBREPLACEB
版本 2.124.0
新增
- 来自 XLSSuit 差距分析的五个假设检验和分布函数现在在两个引擎上均可计算: Z.TEST (在原假设下样本平均值至少为 x 的单尾右尾概率)、 T.TEST (配对双样本 t 检验 p 值;未配对的等方差/异方差类型予以推迟)、 CHISQ.TEST (通过上尾卡方 CDF 算出的拟合优度 p 值)、 HYPGEOM.DIST (带有累积标志的超几何分布 PMF/CDF)以及 NEGBINOM.DIST (负二项分布 PMF/CDF);p 值计算通过自包含的嵌套例程重用了引擎现有的正态/学生 t/卡方 CDF 助手,因此不改变任何现有的 Calc 方法
Z.TESTxT.TESTCHISQ.TESTHYPGEOM.DISTNEGBINOM.DIST
版本 2.123.0
新增
- 与 XLSSuit 比较后确定的 14 个公式函数缺口现在在两个引擎上均可计算: AVERAGEIF (单条件平均值,引擎此前缺失的 SUMIF/COUNTIF 同胞函数)、 WORKDAY.INTL 和 NETWORKDAYS.INTL (通过数字 1-17 代码或 7 字符的周一至周日字符串自定义周末掩码)、 XIRR 和 XNPV (不规则日期现金流的内部收益率和净现值,通过区间二分法求解)、 CEILING.PRECISE / FLOOR.PRECISE / ISO.CEILING (符号无关的舍入)、 PERCENTRANK.INC / PERCENTRANK.EXC (带有匹配的包含/排除插值的百分比排位)、 MODE.MULT (溢出与最高频率并列的每个值)、 ERF.PRECISE (通过其交错级数计算的高斯误差函数)、 ACCRINT (应计利息)以及 ISPMT (等额本金折旧的期间利息)
AVERAGEIFWORKDAY.INTLNETWORKDAYS.INTLXIRRXNPVCEILING.PRECISEFLOOR.PRECISEISO.CEILINGPERCENTRANK.INCPERCENTRANK.EXCMODE.MULTERF.PRECISEACCRINTISPMT
版本 2.122.0
新增
- 链式批注(Excel 365)现在可在 XLSX 引擎上进行往返读写:工作表上的 AddThreadedComment 和 AddThreadedReply 会构建一个锚定在单元格处的父→子回复树,自动在新的工作簿级 Persons 列表上注册每个作者,并生成每个工作表专用的 xl/threadedComments/threadedCommentN.xml 部分以及工作簿范围的 xl/person/person.xml ;重新打开此类包会从这些部分重建对话树和参与者列表,从而使回复链、标识符和显示名称在完整的读写周期中保留下来
AddThreadedCommentAddThreadedReplyPersonsxl/threadedComments/threadedCommentN.xmlxl/person/person.xml
版本 2.121.0
新增
- 公式评估器现在计算 Excel 365 动态数组函数 XMATCH 、 SORT 、 UNIQUE 和 SEQUENCE ,与已经支持的 XLOOKUP 和 FILTER 并列;结果以二维数组形式溢出,因此 SEQUENCE(3;2;1;1) 返回一个 3×2 的网格, SORT 按任意键列升序或降序对行进行重排, UNIQUE 折叠重复行并保留首次出现的数据,且 XMATCH 报告查找值的基于 1 的位置,具有与 XLOOKUP 相同的精确/通配符/下一个较小值/下一个较大值匹配模式
XMATCHSORTUNIQUESEQUENCEXLOOKUPFILTERSEQUENCE(3;2;1;1)SORTUNIQUEXMATCHXLOOKUP
版本 2.120.0
新增
- 两个引擎的工作表上新增的 PasteFromClipboard 方法可读取 Windows 剪贴板中以制表符分隔的文本 —— 即复制某个范围时 Excel 置于其中的数据,或来自任何其他应用程序的纯文本选择 —— 并从给定的行和列开始写入单元格,具有与 CSV 加载器相同的数字/日期/布尔类型自动转换;以 = 开头的文本成为活动公式,与 Excel 自身的粘贴方式相匹配
PasteFromClipboard=
版本 2.119.0
新增
- 读取 ECMA-376 灵活加密(Agile Encryption)—— 即 Excel 2010 及更高版本默认应用的密码保护: OpenEncrypted 现在会解析 XML 加密描述符,通过 SHA-512 自旋计数哈希派生密钥,验证密码,并解密 AES-CBC 分段包(AES-128/192/256),从而使直接在 Excel 中受密码保护的工作簿可在未安装 Excel 的情况下打开
OpenEncrypted OpenEncryptedOpenEncrypted 通过一个入口点处理所有这三种情况:普通的未加密 .xlsx 、标准加密(我们的 SaveAsEncrypted 往返)以及灵活加密;密码错误在每个方案中都会引发相同的明确错误.xlsxSaveAsEncrypted
修复
- 保存工作表 XML 超过约 116 KB(大约 3,000 行典型字符串数据)的 .xlsx 工作簿时会因栈溢出而崩溃;ZIP 写入器的 CRC-32 校验和现在以 64 KB 的分块处理数据,从而使压缩后端避开了会在栈上分配超大暂存缓冲区的“大输入”代码路径,校验和结果保持不变
.xlsx
更改
- 共享字符串去重现在通过哈希表运行,而不是扫描字符串列表,且 sharedStrings.xml 部分是通过预先分配内存的字符串构建器组装,而不是重复的字符串拼接 —— 配合常数时间的单元格索引,这使得保存 120,000 个字符串单元格的时间从数十秒缩短至约三分之一秒
sharedStrings.xml
版本 2.117.0
更改
- XLSX 单元格访问现在是常量时间:工作表单元格集合带有 (行, 列) 上的哈希索引,取代原先的线性扫描——填充、回读或加载大工作表的开销随单元格数量线性增长而不是平方增长;填满 100,000 个单元格过去需要数分钟,现在远不到一秒
- speedup applies across engine: Cells[r, c] , HasCell , 工作簿 loading, saving, cross-工作簿 copies, auto-fit, 和 每个 helper touches 单元格 通过 position all benefit; 行 和 列 insertion 或 deletion rebuilds 索引 在 single pass
Cells[r, c]HasCell
版本 2.116.0
新增
- PDF export 中的 经典 XLS engine: new SaveAsPDF 方法 on 工作表 和 工作簿 render 已使用 区域 (或 caller-supplied 区域 通过 TXLSPDFExport ) as paginated grid — 单元格 display 文本 通过 number 格式, gridlines, 列 widths derived 从 Excel widths 和 scaled 到 fit 页面, 和 automatic multi-页面 pagination
SaveAsPDFTXLSPDFExport - Output 是 self-contained PDF 1.4 文件 使用 no external dependencies, 使用 built-在 Helvetica 字体 使用 WinAnsi 文本 encoding; portrait 或 landscape A4 orientation, 页面 margin, 和 字体 size 是 configurable on exporter
- 此 是 data-presentation export alongside HTML 和 RTF: it reproduces tabular content 和 layout 用于 reports 和 document handoff rather than full per-单元格 styling
版本 2.115.0
新增
- 一个-call chart creation 从 data 区域 中的 XLSX engine: new AddChartFromRange builds complete chart 和 derives its series automatically 从 rectangular data block — equivalent 的 Excel's "insert chart 从 selection" — 使用 series-在-列 或 transposed series-在-行 layout
AddChartFromRange - Named shortcuts AddColumnChart , AddBarChart , AddLineChart , AddPieChart , 和 AddAreaChart pick chart type 通过 名称 over same 一个-call flow, reading series names 从 header 行 和 category labels 从 first 列
AddColumnChartAddBarChartAddLineChartAddPieChartAddAreaChart - Series references 是 qualified 使用 source 工作表's quoted 名称, so generated chart keeps working 当 placed on any 工作表 和 survives save 和 reload
版本 2.114.0
新增
- RTF import 中的 经典 XLS engine, inverse 的 现有 SaveAsRTF export: new OpenRTF 方法 on 工作表 和 工作簿 read RTF document's table 到 工作表 单元格 — \cell advances 列, \row advances 行 — starting at A1
SaveAsRTFOpenRTF\cell\row - Recovers tabular data 从 文件 produced 通过 SaveAsRTF , Word, 或 WordPad: numeric 文本 是 stored as 编号 so 公式 keep working, hex ( \'hh ) 和 Unicode ( \uN ) escapes decode correctly, 和 header groups (字体 table, 颜色 table, stylesheet, info) 是 skipped
SaveAsRTF\'hh\uN - Documents 使用 no table fall back 到 paragraph mode, importing each \par as next 行 在 列
\par
版本 2.113.0
新增
- Reading 的 encrypted .xlsx 工作簿: OpenEncrypted now decrypts ECMA-376 Standard Encryption (AES-128) packages, completing round trip 使用 现有 SaveAsEncrypted — it reads compound-文件 container, derives key 从 密码, verifies it, 和 loads recovered 工作簿
.xlsxOpenEncryptedSaveAsEncrypted - wrong 密码 raises clear "密码 是 incorrect" error, 和 OpenEncrypted on plain unencrypted .xlsx continues 到 load it directly, so callers 可以 route 每个 文件 通过 一个 条目 point
OpenEncrypted.xlsx
更改
- unsupported-encryption message now names ECMA-376 Agile Encryption specifically as remaining unsupported scheme, since Standard Encryption reading 和 writing 是 both 可用
版本 2.112.0
新增
- New TaggedText 属性 on XLSX 单元格 converts between rich 文本 和 lightweight markup: <b> , <i> , <u> , <s> , <sub> , <sup> , <color=#RRGGBB> , <font=Name> , 和 <size=N> , 使用 < / > / & escapes — so multi-格式 单元格 content 可以 be produced 从 template 字符串 instead 的 assembling run 对象 通过 hand
TaggedText<b><i><u><s><sub><sup><color=#RRGGBB><font=Name><size=N><>& - 写入标记时会构建 run 列表,并把
Value保持为拼接后的纯文本;不带标签的标记只存储没有富负载的普通字符串;读取时把每个 run 的属性序列化为完整的标签集合;未知标签按原样作为字面文本通过
修复
- rich-文本 run consisting entirely 的 whitespace (用于 example single styled space between words) now survives save 和 reload; previously space was dropped 当 文件 was reopened
版本 2.111.0
新增
- New OnProgress 事件 on XLSX 工作簿 reports load 和 save progress: it fires once per 工作表 as it 是 parsed during Open 或 emitted during SaveAs , carrying phase (reading 或 writing), current 1-基于 工作表 number, 和 total — so applications 可以 drive progress bar over long multi-工作表 operations at negligible callback cost
OnProgressOpenSaveAs
版本 2.110.0
新增
- New TXLSRowCursor dataset-样式 行 cursor 用于 .xlsx / .xlsm 文件: Open , SelectSheet , then FindFirst / FindNext walk 工作表 一个 行 at time 使用 仅 current 行's 单元格 在 memory — pull-driven alternative 到 TXLSDirectReader 's callbacks 用于 sequentially processing multi-million-行 工作表
TXLSRowCursor.xlsx.xlsmOpenSelectSheetFindFirstFindNextTXLSDirectReader - Each 行 exposes its 1-基于 工作表 行 number, populated 单元格 在 document order (强类型 值, 公式 文本, 样式 索引), 和 ValueByCol lookup 返回 Null 用于 列 not populated on 行; 行 使用 no populated 单元格 是 skipped
ValueByColNull - 工作表 names 和 count 是 可用 after Open (文件 和 stream overloads), 使用 shared strings 和 date-格式 detection handled same way as streaming reader
Open
版本 2.109.0
新增
- New TXLSXCellFormat "格式 brush" 用于 XLSX engine: describe 字体, fill, 边框, alignment, number 格式, 和 protection once, then stamp any number 的 targets 使用 Apply (single 单元格), ApplyRange , ApplyRows , ApplyCols , 或 ApplySheet
TXLSXCellFormatApplyApplyRangeApplyRowsApplyColsApplySheet - 仅 aspects actually touched 是 applied — brush 设置 just Font.Bold leaves targets' fills, 边框, 和 number 格式 untouched — so brushes compose 使用 现有 formatting like Excel's 格式 painter
Font.Bold - Each apply resolves touched aspects 到 工作簿 样式 pools once 和 then writes 仅 pool indices per 单元格, so formatting large 区域 costs 一个 pool lookup per aspect rather than per 单元格; ApplyRange materializes missing 单元格 当 行/列/工作表 forms stamp 现有 单元格 仅
ApplyRange
版本 2.108.0
新增
- Localizable 布尔值 display 文本: new XLSBooleanTrueText / XLSBooleanFalseText variables control how 布尔值 单元格 值 render wherever display 文本 是 produced — FormattedText , HTML export, 和 auto-fit measurement — so localized applications 可以 show 用于 example WAHR/FALSCH 或 VRAI/FAUX
XLSBooleanTrueTextXLSBooleanFalseTextFormattedText
更改
- 布尔值 单元格 now display as TRUE / FALSE 通过 default, matching Excel's grid, instead 的 runtime's True / False capitalization
TRUEFALSETrueFalse
版本 2.107.0
新增
- New OnPassword 事件 on 经典 XLS 工作簿: 当 Open meets encrypted 工作簿 和 supplied 密码 是 missing 或 wrong, 事件 asks application 用于 密码 和 retries open (up 到 three attempts) — so interactive tools 可以 prompt user instead 的 pre-loading passwords 或 inspecting error codes
OnPasswordOpen - 事件 receives current 密码 通过 参考 和 Retry flag; leaving Retry at False gives up 和 返回 original 密码 error
RetryRetryFalse
版本 2.106.0
新增
- New TXLSFileMonitor 类 watches 工作簿 文件 on disk 和 fires OnFileChanged 当 another process — typically Excel — saves over it, so applications 可以 reload 和 refresh their view automatically
TXLSFileMonitorOnFileChanged - Polling-基于 (last-write time plus size, IntervalMs configurable, 1 s default), so it works on local disks 和 network shares alike 不使用 message loop; SynchronizeEvent chooses between main-thread delivery 用于 UI handlers (default) 和 direct watcher-thread delivery 用于 console 或 service code
IntervalMsSynchronizeEvent - 保存周期中短暂消失的文件不会触发虚假事件;变更会在新内容就位后再报告
版本 2.105.0
新增
- Bounded auto-fit 中的 经典 XLS engine, matching limits XLSX engine already offers: new AutoFit(Columns, AMin, AMax) , ColumnsAutoFit(AMinWidth, AMaxWidth) , 和 RowsAutoFit(AMinHeight, AMaxHeight) overloads clamp 每个 fitted 列 宽度 (Excel 宽度 units) 或 行 高度 (points) 到 given 区域 — 0 leaves side unbounded, 和 all-empty 列 或 行 still receives requested minimum
AutoFit(Columns, AMin, AMax)ColumnsAutoFit(AMinWidth, AMaxWidth)RowsAutoFit(AMinHeight, AMaxHeight)
版本 2.104.0
新增
- New 只读 FormattedText 属性 返回 单元格's display 文本 — stored 值 rendered 通过 its number 格式, way Excel shows it 中的 grid — covering thousands separators, decimals, percentages, date 和 time masks, multi-section positive/negative/zero masks, 和 布尔值 格式
FormattedText - 可用 在 both engines: on IXLSRange 中的 经典 XLS engine (multi-单元格 区域 render their anchor 单元格) 和 on TXLSXCell 中的 XLSX engine (rich-文本 单元格 返回 their concatenated run 文本)
IXLSRangeTXLSXCell
版本 2.103.0
新增
- New DetectExcelContentFormat 函数 (文件 名称 和 stream overloads) identifies 工作簿's container 从 its leading bytes rather than 文件 extension — reporting BIFF/OLE compound 文件, OOXML .xlsx package, OpenDocument .ods package, 或 plain delimited 文本 — so applications 可以 route renamed 或 extension-less 文件 到 right loader
DetectExcelContentFormat.xlsx.ods
更改
TXLSWorkbook.OpenTXLSWorkbook.Open now sniffs content signature 和 rejects ZIP-基于 packages ( .xlsx 或 .ods renamed 到 .xls ) 使用 clear message naming right loader, instead 的 failing 使用 opaque error code.xlsx.ods.xlsTXLSXWorkbook.OpenTXLSXWorkbook.Open now recognizes OLE compound-文件 content (legacy .xls renamed 到 .xlsx , 或 encrypted package) 和 reports what 文件 actually 是, instead 的 surfacing ZIP parser error.xls.xlsx
版本 2.102.0
新增
- Cross-工作簿 工作表 copy 中的 经典 XLS (BIFF8) engine now brings 工作簿-level defined names 公式 uses over 到 destination — same thing Excel does 当 工作表 moves between 工作簿: 名称 destination already has 是 bound as-是 (no duplicate 是 created), missing 名称 是 registered 使用 its original definition 和 visibility so 公式 recompiles against it, 和 名称 whose definition cannot resolve 中的 destination (用于 example, it points at 工作表 does not exist there) leaves 公式 on its computed 值 as before
版本 2.101.0
新增
- 经典 XLS (BIFF8) 引擎的跨工作簿工作表复制,现在会在目标中没有所引用名称的工作表且源已保存到文件时,把公式重新指向作为外部链接的源工作簿:被复制的单元格仍是活公式(其引用切换为 [SourceBook]Sheet 形式),源的计算值作为缓存结果保留,因此在链接刷新前读取仍然可用,外部工作簿引用可经保存和重新加载往返;带定义名称引用的公式,以及来自未保存源工作簿的副本,照旧保留计算值
版本 2.100.0
新增
- Array 公式 now survive 工作表 copies 中的 经典 XLS (BIFF8) engine: each array 区域 是 rebuilt as whole 中的 copy — within same 工作簿 和 across 工作簿 alike — 使用 root 公式 recompiled against destination's 工作表 names; array destination cannot recompile keeps its computed 值 instead
修复
- Copying 区域 包含 array-公式 单元格 between 经典 XLS 工作表 no longer risks crash on spill 单元格 (which carry no 公式 tree 的 their own); such 单元格 now transfer their computed 值
版本 2.99.0
新增
- Chart 工作表 可以 now be copied between 经典 XLS (BIFF8) 工作簿: chart record stream 是 cloned 到 destination, series category / 值 / 名称 references 是 recompiled against destination's 工作表 names (series whose 工作表 has no same-名称 counterpart falls back 到 empty 参考 so 文件 still opens), chart 字体 references migrate 通过 值 到 destination 字体 table, 和 页面 setup, tab 颜色, zoom, 和 visibility 的 chart 工作表 come along; 此 removes last documented limitation 的 cross-工作簿 工作表 copy
版本 2.98.0
新增
- Cross-工作簿 工作表 copy 中的 经典 XLS (BIFF8) engine now preserves rich-文本 formatting inside 单元格: each formatting run's 字体 是 migrated 通过 值 到 destination 工作簿's 字体 table 和 run 是 rewritten 到 point at it, so mixed-字体 strings keep their appearance instead 的 falling back 到 plain 文本; phonetic (Far-East) auxiliary data travels 使用 字符串 as well
修复
- 字体 referenced 仅 通过 rich-文本 runs (和 not 通过 any 单元格 格式) 是 no longer dropped 从 字体 table 当 saving 经典 XLS 工作簿, 和 runs now follow same 字体 reordering as 单元格 格式 on save, so rich-文本 strings keep correct 字体 after save/reload cycle
版本 2.97.0
新增
- Cross-工作簿 工作表 copy 中的 经典 XLS (BIFF8) engine now also clones embedded pictures: image bytes migrate 到 destination 工作簿's picture store (identical images 是 shared rather than duplicated), 和 each picture frame keeps its 单元格 anchor, size, visibility, 和 transparent 颜色; new CrossWorkbookCopyXls sample project demonstrates 经典-engine copy end 到 end
更改
- 经典 XLS cross-工作簿 copy limitations 是 now documented: chart 工作表 是 not copied (AddCopy 返回 nil 用于 them), 和 公式 whose 工作表 参考 has no same-名称 工作表 中的 destination keeps source's computed 值 instead 的 becoming external 参考
版本 2.96.0
新增
- Cross-工作簿 工作表 copy 中的 经典 XLS (BIFF8) engine now also clones conditional 格式 (单元格-是 和 expression rules, data bars, 颜色 scales, icon 设置, 和 their differential styles), data validations (list, numeric, date, 文本-length, 和 custom rules 使用 prompt 和 error boxes), AutoFilter definition 使用 its per-列 criteria (dropdown buttons 是 rebuilt 中的 copy), 和 表 (ids 和 names 是 re-issued so they stay unique 中的 destination 工作簿); rule 公式 是 recompiled against destination's 工作表 names, matching behavior 的 单元格 公式
版本 2.95.0
新增
- 经典 XLS (BIFF8) 工作表 可以 now be copied 从 一个 工作簿 到 another: TXLSWorksheets.AddCopy 添加 new 工作表 到 destination 工作簿 和 copies source 工作表's 单元格 值, 公式 (re-encoded as 文本 so destination recompiles them against its own 工作表 names, keeping same-名称 3D references live), merged 单元格, 批注, 超链接, 行 heights, 列 widths, outline levels, frozen panes, 工作表 protection, 页面 setup, manual 页面 breaks, tab 颜色, 和 view settings; 单元格, 行, 和 列 格式 是 migrated 通过 值 到 destination 工作簿's 格式 table, so styled source produces independently styled copy
- Cross-工作簿 格式 migration 中的 经典 XLS engine now carries full-precision RGB 和 主题 颜色 alongside each 格式 条目, so fills, 字体, 和 边框 keep their exact 颜色 instead 的 falling back 到 palette approximations; 此 also applies 到 区域-level paste between 工作簿
版本 2.94.0
新增
- Cross-工作簿 工作表 copy now clones conditional 格式 (使用 their differential styles 和 dataBar / colorScale / iconSet visual payloads), 表, data validations, 和 charts (使用 每个 series); each sub-对象 deep-copies its own state 到 destination 工作表
- Cross-工作簿 公式 references 是 rewritten: 参考 whose 工作表 名称 exists 中的 destination resolves as-是, otherwise it becomes external 参考 back 到 source 工作簿 (which 是 registered as external link) 或 #REF! 当 source has no 文件 identity; rewrite applies 到 单元格 公式, conditional-格式 rules, data-validation 公式, 和 chart series 区域 alike
版本 2.93.0
新增
- 现在可以把工作表从一个工作簿复制到另一个工作簿:TXLSXSheets.AddCopy 会在目标工作簿中添加新工作表,并把源工作表的单元格、公式、合并区域、列/行尺寸、隐藏/折叠/分级显示标志、冻结窗格、视图状态、保护、页面设置、AutoFilter 区域和标签颜色一并复制过去;六个逐单元格样式索引会通过值相等查找重映射到目标工作簿自己的字体/填充/边框/NumberFormat/Alignment/Protection 池,因此带样式的源生成的是独立设置样式的副本,而不是指向错误池的索引
- six per-attribute 样式 pools (字体, Fills, 边框, NumberFormats, Alignments, Protections) each expose 1-基于 LookupOrAdd deduplicates 通过 值; new CrossWorkbookCopy sample project demonstrates cross-工作簿 copy 使用 样式 保留
版本 2.92.0
新增
- XLSX 工作簿 now 支持 数据透视表: TXLSXWorksheet.AddPivotTable scans flat source 区域, auto-builds pivot cache, 和 返回 强类型 数据透视表 用于 行 / 列 / 页面 / data-axis wiring, mirroring long-standing BIFF8 (XLS) engine API so same code targets either 格式; PivotSetDataFieldFormat assigns number 格式 到 each aggregated 值 field
- Excel-created 数据透视表 往返 不使用 loss 通过 Open then Save: XLSX engine preserves each pivot cache definition, cache records, 和 数据透视表 part verbatim 和 replays original bytes on save, so re-saving 工作簿 never drops 或 alters its pivots even 当 they use 功能 强类型 模型 does not expose
版本 2.91.0
新增
- 现在可以对数据应用工作表 AutoFilter,使保存后的工作簿在打开时已将不匹配的行隐藏起来,与在筛选下拉列表中选择某个值时 Excel 的行为一致
- 嵌入的图像现在除 EMU 值外,还以真实单位(厘米、英寸、磅)暴露其几何尺寸,并支持按缩放比例调整大小,且可选是否锁定纵横比
- 页面设置的页边距现在可以直接以厘米为单位进行设置,作为基于英寸页边距的公制便利方式
- 受保护的 XLSX 工作表现在通过新的 AllowOption 属性暴露了十五个细粒度的权限开关(设置单元格格式、插入 / 删除行和列、排序、AutoFilter、选择锁定 / 未锁定单元格等),与 Excel 的“审阅 > 保护工作表”复选框列表一致;各项设置均可通过文件往返保留
- XLSX 工作表现在可以被复制(TXLSXSheets.Duplicate):会新增一个工作表,并将源工作表的单元格、合并区域、列 / 行尺寸、冻结窗格、视图状态、保护、页面设置和标签颜色复制到其中,与 Excel 的“右键 > 移动或复制 > 建立副本”一致
- 新增二十二个示例项目,覆盖该库所支持的能力:工作簿加密、单元格批注、超链接、已定义名称、AutoFilter 求值、嵌入图片、发票模板、高级 XLSX 条件格式、合并单元格、行 / 列分级显示、冻结窗格、多工作表布局、数组公式、区域复制 / 移动、查找 / 替换、日期系统、富文本、高级 CSV、HTML 导出选项、自定义数字格式、隐藏行 / 列以及工作表保护
版本 2.90.29
更改
- 流式直接读取器现在即使在未附加单单元格处理程序的情况下也能计算每个已填充单元格的数量,因此可以使用普通的 ReadFile 调用来快速确定工作表的大小;返回的数量和 CellCount 属性会报告扫描到的已填充单元格数量
版本 2.90.28
新增
- 公式现在可以逐步求值,相当于 Excel 的“公式求值”命令:新的跟踪器每次解析一个子步骤的表达式,从最内层开始,并报告每次解析及其源子表达式、操作数替换为值后的相同子表达式以及结果值,以便应用程序可以显示结果的构建过程;它遵循运算符优先级,保持 SUM 等函数的区域引用完整,并重用工作表计算引擎,因此每一步都与完全重新计算的结果一致
版本 2.90.27
新增
- 现在可以通过新的流式直接写入器逐个单元格生成 XLSX 工作簿,该写入器在行到达时将每个工作表直接输出到包中,而无需在内存中构建完整的单元格树,因此可以以几乎恒定的内存占用生成非常大的文件;该写入器跨多个工作表处理内联字符串、数字、布尔值、日期和公式,并可与流式直接读取器无缝交互
版本 2.90.26
新增
- 现在可以通过新的流式直接读取器逐个单元格扫描 XLSX 工作簿,该读取器会引发每单元格和每工作表事件,而无需在内存中构建完整的单元格树,从而在处理非常大的文件时保持几乎恒定的内存占用;每个报告的单元格都带有其值、类型(数字、字符串、布尔值、日期或错误)、公式文本和样式索引,并提供可选的日期检测和提前中止支持
版本 2.90.25
新增
- 经典 XLS 工作表现在可以通过 A1 样式的单元格引用添加超链接,同时保留 URL 规范化、工作簿目标子地址、显示文本和屏幕提示
版本 2.90.24
新增
- 经典 XLS 分页符现在可以通过分页符集合和工作表辅助重载,从基于 1 的行列位置和 A1 样式的单元格引用中添加
版本 2.90.23
新增
- 经典 XLS 工作表和形状集合现在可以从 A1 样式的范围字符串创建矩形、椭圆、线条和类型化的自动形状绘图对象
版本 2.90.22
新增
- 经典 XLS 形状集合现在可以通过 AddTextBox 重载从 A1 样式的范围字符串创建文本框
版本 2.90.21
新增
- 经典 XLS 文本框现在可以通过新的 SetArea 重载从 A1 样式的范围字符串重新定位
版本 2.90.20
新增
- 经典 XLS 工作表文本框现在可以通过 AddTextBox 重载从 A1 样式的范围字符串创建
版本 2.90.19
新增
- 经典 XLS 工作表现在可以通过新的 AddTextBox 方法,直接从行列锚点创建绘图文本框
版本 2.90.18
新增
- 经典 XLS 工作表现在可以通过新的 AddComment 重载,直接从行列坐标创建单元格批注