一个纯 Go 写的表格库,这次把安全补丁打成了主角。Excelize 发布 2.11.1 版本,最显眼的变化是修掉了一串 CVE 编号的安全问题,其中不少是直接让程序崩溃的 panic。
![]()
先看硬门槛:这个版本把 Go 语言版本要求提到了 Go 1.26.0 或更高,原因是升级了依赖包 golang.org/x/crypto。这是一处破坏性变更,老项目升级前得先看自己的 Go 版本够不够。
安全修复覆盖了读写表格的多个环节,包括:
- 读取负值共享字符串索引的单元格值时崩溃(CVE-2026-104819)
- 透视表字段索引非法时 GetPivotTables 崩溃(CVE-2026-107211)
- 行迭代器行号无上限(CVE-2026-107212)
- 工作表没有绘图部件时 GetSlicers 崩溃(CVE-2026-107213)
- 解密畸形工作簿时崩溃(CVE-2026-107214)
- 解密工作簿时 EncryptionInfo 与 EncryptedPackage 流大小无上限分配(CVE-2026-107215)
- 循环 ANCHORARRAY 公式引用导致 CalcCellValue 栈溢出(CVE-2026-107216)
- ColumnNameToNumber 与 JoinCellName 接受非法列名引发整数溢出(CVE-2026-107217)
- LEFT、LEFTB、RIGHT、RIGHTB 公式函数的 Unicode 处理与计数溢出(CVE-2026-107218)
- 派生敏捷解密密钥时自旋次数无上限(CVE-2026-107219)
- 合并单元格引用为空时崩溃(CVE-2026-107220)
- 某行单元格未按列升序排列时崩溃(CVE-2026-107221)
- 条件格式规则畸形时 GetConditionalFormats 崩溃(CVE-2026-107222)
- 最小与最大列号溢出(CVE-2026-107223)
- 拒绝超出有符号 int64 范围的 Zip64 未压缩大小(CVE-2026-107224)
- 负值样式索引取样式时崩溃(CVE-2026-107225)
功能侧也有新增。这个版本加入了 EmbeddedObject 数据类型,新增两个常量 MaxCFBStreamSizeV3 和 MaxCFBStreamSizeV4;新增 GetShapes 函数用于获取形状;新增 GetEmbeddedObjects 与 SetGetEmbeddedObject,用于读写嵌入对象。CalcCellValue 的 AND 公式函数开始支持矩阵参数,SetConditionalFormat 则会校验样式索引。
兼容性上,SetCellValue 存储数值的精度已与 Microsoft Excel 对齐。这一条对做报表导出的人意义不小,数值对不上的老问题有了官方口径。
Bug 修复里最扎眼的是公式计算。CalcCellValue 一次性修掉了 16 个公式函数返回错误结果的问题,名单包括 COUNT、COUNTA、EDATE、HLOOKUP、IF、INDIRECT、ISNUMBER、MDETERM、MINVERSE、OR、SUM、TRIM、VALUE、VLOOKUP、WEEKDAY 和 XLOOKUP。此外还修了括号或运算符内出现错误值时结果不对、部分场景不返回预期错误、括号不配对时崩溃、AVERAGEIFS 等函数参数非法时崩溃等问题。
其他修复还包括:GetPictures 在部分情况下不返回编辑定位;AddChart 与 AddChartSheet 在部分情况下生成无效图表并损坏工作簿;流式写入器未对时长单元格值应用数字格式;用 time.Duration 设置单元格值时的精度丢失;AddSlicer 对不同字段复用透视表切片器缓存;GetStyle 对无图案填充返回无效样式;工作簿使用绝对路径时 GetFormControls 与 GetTables 取不到表单控件和表格;GetPanes 在部分情况下取不到拆分窗格;SetCalcProps 无法把计算属性设为 false;ExcelDateToTime 对 1900 年 1 月和 2 月返回早一天的日期。
周边生态同步更新:文档站已覆盖 12 种语言,包括阿拉伯语、德语、英语、西班牙语、法语、意大利语、日语、韩语、葡萄牙语、俄语、简体中文和繁体中文;excelize-wasm 的 NPM 包、excelize-py 的 PyPI 包、ExcelizeCs 的 NuGet 包均已发布更新版本。
这个库支持读写 XLAM、XLSM、XLSX、XLTM、XLTX 文件,兼容 Microsoft Excel 2007 及之后版本生成的表格文档,并提供流式 API 处理大数据量工作表。项目地址在 github.com/xuri/excelize。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.