Excelize 开源十周年,发布 2.11.0 版本
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Excel、WPS、OpenOffice 等办公软件创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写支持,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。自 2016 年开源以来已成为开发者在处理电子表格办公文档时的热门选择,正在被广泛应用于大型互联网公司、中小企业客户和初创公司。荣获 2025 上海开源创新菁英奖、入选 2023 开源创新榜优秀开源项目、荣获 2022 年中国开源创新大赛一等奖、2020 Gopher China - Go 领域明星开源项目 (GSP)、2018 年开源中国码云最有价值开源项目 GVP (Gitee Most Valuable Project)。
开源代码
- AtomGit:atomgit.com/xuri/excelize
- GitHub:github.com/xuri/excelize
- 中文简体字文档:xuri.me/excelize/zh-hans
2026年7月7日,在 Excelize 开源十周年之际,社区正式发布了 2.11.0 版本,该版本包含 40 余项更新,包括新增功能、错误修复和兼容性提升优化。来自世界各地的 27 名开发者为此版本贡献了代码。下面是有关该版本更新内容的摘要,此版本中最显著的变化包括:
版本说明
此版本中最显著的变化包括:
兼容性提示
- 升级 Go 语言版本要求至 1.25.0 或更高版本,以升级依赖包
golang.org/x/net - 关于
AddChart、AddChartSheet和AddShape函数的不兼容变更Chart数据类型中Title字段的数据类型由[]RichTextRun更改为ChartTitleShape数据类型中Line字段的数据类型由ShapeLine更改为LineOptions- 数据类型
ChartDashType重命名为LineDashType - 数据类型
ChartLineType重命名为LineType - 数据类型
ChartLine重命名为LineOptions
安全更新
- 读取工作表时检查行号以防止无限制内存分配 (CVE-2026-54063),相关安全公告 #GHSA-h69g-9hx6-f3v4
- 通过验证工作表行号是否超出最大限制来防止攻击者控制流式读取内存分配 (CVE-2026-59161),相关安全公告 #GHSA-q5j5-6p94-4gwc
- 防止在共享字符串表索引无效时获取单元格值引发程序 panic (CVE-2026-59162),相关安全公告 #GHSA-fx5j-qcqg-grpf
新增功能
- 新增
ChartTitle数据类型 - 新增
PivotTableShowValuesAs数据类型 - 新增
PivotTableShowValuesAsType枚举类型 - 新增 3 个导出错误变量:
ErrPivotTableShowValuesAsBaseField、ErrPivotTableShowValuesAsBaseItem和ErrUnsupportedPivotTableShowValuesAsType PivotTableField数据类型中新增ShowValuesAs字段PivotTableOptions和SlicerOptions数据类型中新增SelectedItems字段- 新增
AutoFitColWidth函数,支持自动调整列宽,相关 issue 92 SetSheetName函数支持对原本无效的名称工作表进行重命名,相关 issue 548CalcCellValue函数支持计算带有波浪号通配符条件的单元格公式CalcCellValue函数支持计算带有隐式交集的单元格公式,并修复正则表达式条件计算有误的问题CalcCellValue函数支持计算带有跨工作表的三维引用单元格公式,相关 issue 2303CalcCellValue函数支持返回不应用数字格式的原始单元格公式计算结果,相关 issue 2316AddPivotTable函数在创建数据透视表时,支持检查相同数据字段是否同时出现在数据透视表的列、行和筛选字段中,以防止生成损坏的工作簿AddPivotTable和GetPivotTables函数支持设置和获取数据透视表数据字段的"值显示方式",相关 issue 2340AddPivotTable、AddSlicer、GetPivotTables和GetSlicers函数支持设置和获取数据透视表及数据透视表切片器的筛选选定项,相关 issue 2154AddChart和AddChartSheet函数在添加图表时,支持使用公式设置图表标题AddChart和AddChartSheet函数在添加图表时,支持设置图表标题和图表坐标轴标题的布局AddChart和AddChartSheet函数在添加图表时,支持设置图表标题和图表坐标轴标题的线条格式AddShape函数在添加形状时,支持设置形状的线条格式NewStyle函数在创建纯色填充样式时,若未指定自定义颜色值,则支持自动设置前景色和背景色
兼容性提升
- 修复图表工作表在 Excel Online 和 KingSoft WPS™ Office 中不显示的问题,相关 issue 2273
问题修复
- 修复 v2.8.1 中引入的问题,解决 issue 1383
- 修复
AddChart函数在添加图表时,若未指定系列填充颜色将引发程序 panic 的问题 - 修复
CalcCellValue函数在某些情况下,计算带有无效行引用的单元公式时将引发程序 panic 的问题,相关 issue 2266 - 修复使用
CalcCellValue函数时公式精确文本匹配无法匹配子字符串的问题 - 修复
CalcCellValue函数计算 BINOM.INV、CHIINV、CHISQ.DIST、IMSECH、IMSQRT 和 NEGBINOM.DIST 公式函数时的计算精度问题 - 修复
CalcCellValue函数在某些情况下对包含 FREQUENCY 公式函数计算结果有误的问题 - 修复
CalcCellValue函数计算括号或运算符内包含错误值的公式时,返回错误计算结果的问题,解决 issue 2344 - 修复
AddComment函数添加批注时,若作者已存在于作者列表时,为所有批注分配错误作者 ID 的问题,相关 issue 2289 - 修复因返回错误前未正确释放文件锁而导致潜在死锁的问题
- 修复部分情况下自定义数字格式中逗号未被正确格式化的问题,解决 issue 2297
- 修复列迭代器读取包含无效工作表 XML 的损坏工作簿时引发程序 panic 的问题,解决 issue 2299
- 修复调整包含外部引用的公式后,公式中的单引号丢失问题
- 修复部分情况下无法解密使用 ECMA-376 Agile 加密和 SHA-512 哈希算法保护的工作簿的问题,解决 issue 2328
- 修复
SetCellFormula函数在使用普通公式覆盖共享单元格公式时,未清除共享公式元数据的问题,解决 issue 2337
性能优化
- 降低读取未加密工作簿时的内存占用,行迭代器内存开销相较于上一版本降低最高约 85%
- 优化坐标转换函数及部分内部函数的性能
ColumnNumberToName函数的内存开销相较于上一版本降低最高约 90%CoordinatesToCellName函数的内存开销相较于上一版本降低最高约 13%- 内部函数
isNumeric的内存开销相较于上一版本降低最高约 68%
其他
- Go Modules 依赖模块更新
- 单元测试与文档更新
- 包含阿拉伯语、德语、英语、西班牙语、法语、意大利语、日语、韩语、葡萄牙语、俄语、简体中文和繁体中文的多国语言文档网站更新
- 支持 WebAssembly / JavaScript 的 excelize-wasm NPM 包发布版本更新
- 支持 Python 的 excelize PyPI 包发布版本更新
- 支持 C# 的 ExcelizeCs NuGet .Net 包发布
致谢
感谢 Excelize 的所有贡献者,以下是为此版本提交代码的贡献者列表:
- Rynzie02 (Rynzie)
- jpoz (James Pozdena)
- tvso (Tammy)
- yyt030 (yyt)
- hwo411 (Igor Khodyrev)
- JimLee0921 (TuoLee)
- zhuyanhuazhuyanhua (zhuhua)
- kenny-not-dead (Roman Sergeev)
- debugdoctor (Debug Doctor)
- Journeyman150 (Vladislav Anisimov)
- ivolkoff (Ivan Volkov)
- plandem (Andrey G.)
- martskins
- shcabin
- narasaka (Nathanael Tehilla Gunawan)
- lawrence3699 (chaoliang yan)
- SAY-5 (Sai Asish Y)
- noahchiu22 (Noah)
- rootsec1 (Abhishek Murthy)
- guangxuewu
- AdamDrewsTR (Adam Drews)
- grmblfrz (Swen Thümmler)
- WaterRRabbit
- krystophny (Christopher Albert)
- Aprax14 (Damiano Scarpellini)
- artur-chopikian (Artur Chopikian)
- huijian3139 (Jason)
