Golang Excelize 2.9.1 发布 - 支持 XLAM/XLSM/XLSX/XLTM/XLTX 的开源Excel库
Golang Excelize 2.9.1 发布 - 支持 XLAM/XLSM/XLSX/XLTM/XLTX 的开源Excel库

Excelize 是一个用纯 Go 语言编写的库,提供了一系列函数,允许您读写 XLAM / XLSM / XLSX / XLTM / XLTX 文件。支持读写由 Microsoft Excel™ 2007 及更高版本生成的电子表格文档。通过高兼容性支持复杂组件,并提供了流式 API,用于从包含大量数据的工作表中生成或读取数据。
GitHub: github.com/xuri/excelize
我们很高兴地宣布 2.9.1 版本的发布。本次更新包含了一些新的功能领域和大量的错误修复。
变更摘要可在发布说明中找到。
发布说明
本次发布中最值得注意的变更有:
重大变更
- 升级要求 Go 语言版本为 1.23 或更高,以升级依赖包
golang.org/x/crypto - 将
DataValidationType、DataValidationErrorStyle、DataValidationOperator、PictureInsertType的数据类型从int改为byte - SetCellInt 函数要求
int64数据类型参数,解决 issue 2068 - 当添加图片、图表、形状和表单控件等绘图对象时,偏移设置将不再影响绘图对象的大小,相关 issue 2001
重要功能
- 在
Chart数据类型中添加新字段GapWidth和Overlap - 在
ChartPlotArea数据类型中添加新字段ShowDataTable和ShowDataTableKeys - 在
ChartAxis数据类型中添加新字段Alignment - 在
ChartSeries数据类型中添加新字段DataLabel - 为
PageLayoutOptions数据类型添加新字段PageOrder - 添加 2 个新的导出错误变量:
ErrPageSetupAdjustTo和ErrStreamSetColStyle - 添加 2 个新的导出枚举:
HeaderFooterImagePositionType和IgnoredErrorsType - 添加 2 个新的导出数据类型:
CalcPropsOptions和HeaderFooterImageOptions - 添加 2 个新函数:
SetCalcProps和GetCalcProps支持设置和获取工作簿计算属性 - 添加新的
CultureNameJaJP、CultureNameKoKR和CultureNameZhTW枚举值,支持为日本年号、韩国檀纪年和中华民国年应用数字格式,相关 issue 1885 - 添加新函数
AddHeaderFooterImage以支持在页眉和页脚中设置图形,相关 issue 1395 - 添加新函数
AddIgnoredErrors支持忽略单元格范围的错误,相关 issue 2046 - 为流式写入器添加新函数
SetColStyle以支持设置列样式,相关 issue 2075 AddChart和AddChartSheet函数支持设置图表轴文本方向和旋转,相关 issue 2025AddChart和AddChartSheet函数支持为柱形图和条形图设置间隙宽度和重叠,相关 issue 2033AddChart和AddChartSheet函数支持设置图表系列数据标签的格式,相关 issue 2052AddChart和AddChartSheet函数支持为图表设置数据表,相关 issue 2117AddFormControl函数支持为复选框设置单元格链接,相关 issue 2113SetPageLayout函数支持设置页面布局的页面顺序DeletePicture函数支持删除单单元格锚定图片,相关 issue 2059- 如果
SetPageLayout函数的选项值无效,将返回错误 - 支持跨多个工作表调整数据验证,相关 issue 2072
- 支持应用带有井号和零占位符的数字格式,相关 issue 2058
- 支持应用带有
?符号的数字格式 - 支持在指定定位为 “oneCell” 时插入单单元格锚定绘图对象,相关 issue 2002
错误修复
- 修复 v2.9.0 的一个回归错误:打开由流式写入器生成的工作簿时生成损坏的工作簿,解决 issue 2015
- 修复生成冗余的无类型图案填充,解决 issue 2014
- 修复在某些情况下缺少垂直和水平边框样式,解决 issue 2048
- 修复在某些情况下条件格式的边框样式缺失,解决 issue 2061
- 修复在某些情况下获取数据透视表时发生 panic,解决 issues 1954 和 2051
- 修复
GetStyle函数无法获取VertAlign格式 - 修复
CalcCellValue函数在某些情况下子表达式计算不正确,解决 issue 2083 - 修复在某些情况下因图片引用检测问题导致删除错误的图片
- 修复在使用流式写入器设置行时,单元格默认样式未被非零行样式覆盖的问题
- 修复流式写入器生成冗余的
cols元素 - 修复设置图表标题字体时发生 panic,解决 issue 2102
- 修复在某些情况下删除计算链时发生 panic
- 修复因共享公式解析错误导致公式计算结果不正确,解决 issue 2056
- 修复当内部 ZIP64 文件大小超过 4GB 时生成损坏的工作簿
- 修复重命名工作表后定义名称中的工作表名称错误,解决 issue 2126
性能
- 使用速度快 3 倍的深拷贝库
github.com/tiendc/go-deepcopy替代github.com/mohae/deepcopy,相关 issue 2029 - 修复 v2.9.0 中的性能回归,减少为空白单元格修剪单元格值的内存分配
- 提高公式包含整列和整行引用时的公式计算性能
- Rows 迭代器速度提升约 20%,内存分配减少约 10%
其他
- 依赖模块已更新
- 单元测试和 godoc 已更新
- 文档网站 支持多语言:阿拉伯语、德语、英语、西班牙语、法语、意大利语、日语、韩语、葡萄牙语、俄语、简体中文和繁体中文,并已更新。
- excelize-wasm NPM 包发布更新,支持 WebAssembly / JavaScript
- excelize PyPI 包发布更新,支持 Python
致谢
感谢所有为 Excelize 做出贡献的人。以下是此版本中有代码贡献的贡献者列表:
- wushiling50
- imirkin (Ilia Mirkin)
- Juneezee (Eng Zer Jun)
- Arpelicy
- zhuhaicity (ZhuHaiCheng)
- xxf0512 (xxf)
- gypsy1234
- mengpromax (MengZhongYuan)
- hly-717
- kurtinge (Kurt Inge Smådal)
- IvanHristov98 (Ivan Hristov)
- artur-chopikian (Artur Chopikian)
- romanshevelev (Roman Shevelev)
- LZCZ
- hm3248
- moisespsena (Moises P. Sena)
- paolobarbolini (Paolo Barbolini)
- timesince
- shcabin
- tgulacsi (Tamás Gulácsi)
- R3dByt3 (R3dByt3)
- Now-Shimmer
更多关于Golang Excelize 2.9.1 发布 - 支持 XLAM/XLSM/XLSX/XLTM/XLTX 的开源Excel库的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang Excelize 2.9.1 发布 - 支持 XLAM/XLSM/XLSX/XLTM/XLTX 的开源Excel库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Excelize 2.9.1 的发布确实带来了许多重要的改进和新功能。以下是一些关键点的技术解析和示例:
1. Go 1.23 要求
升级到 Go 1.23 是必要的,因为依赖的 golang.org/x/crypto 包需要新版本的支持。如果你的项目还在使用旧版本,需要先升级 Go。
2. 数据类型变更
DataValidationType、DataValidationErrorStyle 等从 int 改为 byte,这有助于减少内存占用并提高性能。如果你之前直接使用这些类型的整数值,需要更新为 byte 类型。
// 之前:var op int = excelize.DataValidationOperatorBetween
// 现在:
var op byte = excelize.DataValidationOperatorBetween
3. SetCellInt 参数类型
SetCellInt 现在要求 int64 参数,解决了 issue 2068。这确保了与大型整数的兼容性。
f.SetCellInt("Sheet1", "A1", int64(123456789012345))
4. 新增图表功能
新增的 GapWidth 和 Overlap 字段允许更精细地控制柱形图和条形图的显示。
chart := excelize.Chart{
Type: excelize.Col3DClustered,
Series: []excelize.ChartSeries{...},
Format: excelize.GraphicOptions{...},
Title: excelize.ChartTitle{...},
GapWidth: 150, // 设置间隙宽度为 150%
Overlap: -30, // 设置重叠为 -30%
}
f.AddChart("Sheet1", "E1", &chart)
5. 页眉页脚图片支持
AddHeaderFooterImage 函数允许在页眉或页脚插入图片,解决了 issue 1395。
options := excelize.HeaderFooterImageOptions{
Image: "logo.png",
Position: excelize.HeaderFooterImagePositionLeft,
HeaderFooter: excelize.HeaderFooterTypeHeader,
}
err := f.AddHeaderFooterImage("Sheet1", options)
6. 流式写入器列样式
流式写入器新增 SetColStyle 函数,支持为列设置样式,解决了 issue 2075。
streamWriter, err := f.NewStreamWriter("Sheet1")
styleID, _ := f.NewStyle(&excelize.Style{Font: &excelize.Font{Bold: true}})
streamWriter.SetColStyle(1, 5, styleID) // 为第 1 到 5 列设置样式
7. 忽略单元格错误
AddIgnoredErrors 函数可以忽略指定单元格范围的错误,例如将文本数字忽略为错误。
err := f.AddIgnoredErrors("Sheet1", "A1:B10", []excelize.IgnoredErrorsType{
excelize.IgnoredErrorsNumberStoredAsText,
})
8. 性能提升
使用 github.com/tiendc/go-deepcopy 替换 github.com/mohae/deepcopy,深拷贝速度提升 3 倍。Rows 迭代器性能提升约 20%,内存分配减少 10%。
// 内部优化,无需代码更改,但升级后会自动受益
rows, _ := f.Rows("Sheet1")
for rows.Next() {
row, _ := rows.Columns()
// 处理行数据
}
9. 错误修复
修复了多个关键问题,例如 v2.9.0 中流式写入器生成损坏工作簿的问题(issue 2015),以及公式计算和条件格式的边框样式问题。
// 修复后,流式写入器生成的文件可以正常打开
streamWriter, _ := f.NewStreamWriter("Sheet1")
streamWriter.SetRow("A1", []interface{}{"Data"})
streamWriter.Flush()
f.SaveAs("output.xlsx")
10. 多语言文档
文档网站现在支持 12 种语言,包括阿拉伯语、德语、日语等,方便全球开发者使用。
Excelize 2.9.1 在功能、性能和稳定性方面都有显著提升,建议升级以利用这些新特性。升级时注意 Go 版本要求和数据类型变更。

