Golang Excelize 2.9.0 发布 - 支持 XLAM/XLSM/XLSX/XLTM/XLTX 的开源 Excel 表格处理库
Golang Excelize 2.9.0 发布 - 支持 XLAM/XLSM/XLSX/XLTM/XLTX 的开源 Excel 表格处理库
Excelize 是一个用纯 Go 语言编写的库,提供了一系列函数,允许您读写 XLAM / XLSM / XLSX / XLTM / XLTX 文件。支持读写 Microsoft Excel™ 2007 及更高版本生成的电子表格文档。通过高兼容性支持复杂组件,并提供了流式 API,用于从包含大量数据的工作表中生成或读取数据。
GitHub: github.com/xuri/excelize
我们很高兴地宣布 2.9.0 版本的发布。本次更新包含了一些新的功能领域和大量的错误修复。
变更摘要可在 发布说明 中查看。完整的变更列表可在更新日志中找到。
发布说明
本次发布中最值得注意的变更包括:
重大变更
- 将
ConditionalFormatOptions结构体字段Format的数据类型更改为指针,解决 issue #1867
重要功能
- 新增函数
DeleteSlicer和GetSlicers,相关 issue #810 - 新增函数
MoveSheet以支持更改工作簿中的工作表顺序,相关 issue #1076 - 在
GraphicOptions数据类型中新增AutoFitIgnoreAspect字段,支持用图片填充单元格并忽略其宽高比 - 在
ChartAxis数据类型中新增TickLabelPosition字段,支持设置图表标签位置 - 在
PivotTableField数据类型中新增字段ShowAll、InsertBlankRow和NumFmt - 在
PivotTableOptions数据类型中新增字段ClassicLayout、FieldPrintTitles和ItemPrintTitles - 引入 2 个新的导出枚举类型
ChartTickLabelPositionType和PictureInsertType - 引入新的导出枚举值
ChartLineUnset - 引入 4 个常量
ExtURIDataField、ExtURIPivotField、ExtURIPivotFilter和ExtURIPivotHierarchy - 引入新的导出错误变量
ErrPivotTableClassicLayout MergeCell函数支持在合并单元格时清除从属单元格的值AddDataValidation、DeleteDataValidation和GetCellStyle函数支持并发安全,相关 issues #1825GetDataValidations函数支持获取存储在扩展列表中的数据验证,相关 issue #1835SetSheetName函数支持区分大小写,相关 issue #1856GetPictureCells和GetPictures函数支持获取通过 IMAGE 公式函数插入的单元格图片以及图片的绝对路径SetCellHyperLink函数支持通过None链接类型移除超链接,相关 issue #1940AddChart函数支持创建相同类型的组合图表,相关 issue #1940AddChart函数支持设置散点图的线型- 当使用
AddPivotTable函数创建数据透视表时,如果数据透视表数据范围中的列标题单元格为空,将返回错误,相关 issue #1945 - 新增支持应用带有语言/地区标签和 ID 的数字格式表达式
- 新增支持对时间和持续时间单元格值应用数字格式,相关 issue #2004
- 新增支持的公式函数:DOLLAR
提升兼容性
- 提升应用数字格式的兼容性,支持应用带对齐方式的数字格式,解决 issue #1847
- 提升工作簿内部部件带有电子表格命名空间前缀的兼容性,解决 issue #1886
- 提升工作簿内部媒体文件使用绝对路径的兼容性,解决 issue #1888
错误修复
- 修复 v2.8.1 的回归错误:自动筛选在 LibreOffice 中不工作,解决 issue #1830
- 修复 v2.8.1 的回归错误:支持调整具有多个单元格范围的数据验证,解决 issue #1831
- 修复 v2.8.1 的回归错误:如果条件格式或数据验证具有多个单元格范围引用,则在复制行时出错
- 修复 v2.8.1 的回归错误:如果多次保存,写入的单元格值不正确,解决 issue #1906
- 修复 v2.8.1 的回归错误:在多个工作表上创建迷你图时,迷你图重复,解决 issue #1910
CalcCellValue函数支持计算带有矩阵参数的公式函数 ISNUMBER、OR 和 FIND,解决 issue #1819- 修复
CalcCellValue函数计算结果舍入问题,解决 issue #1851 - 修复
CalcCellValue函数返回公式函数 XIRR 和 XNPV 结果不正确的问题,解决 issue #1989 - 修复
RemoveCol在删除列时返回错误的问题,解决 issue #1829 - 修复 DATE 公式函数结果数据类型不正确的问题,解决 issue #1833
- 修复读取工作簿时,内部行元素缺少
r属性导致的 panic - 修复插入新列或新行时公式中的括号被截断的问题,解决 issue #1861
- 修复某些情况下数据验证转义结果不正确的问题
- 修复某些字符无法在流式写入器中显示的问题,解决 issue #1865
- 保存工作簿时对内部部件路径进行排序,以保持相同文件的哈希值一致,并修复不正确的 MIME 类型,解决 issue #1889
- 修复
AddChart函数在组合图表中设置坐标轴格式无效的问题,解决 issue #1921 - 修复
AddChart函数设置主坐标轴标题位置不正确的问题 - 修复
AddChart函数设置次要垂直坐标轴标题不显示的问题,解决 issue #1926 - 修复
AddChart函数设置折线图线型无效的问题 - 修复
GetPivotTables函数返回的数据范围不正确的问题,解决 issue #1937 - 修复
GetStyle函数在主题缺少sysClr时 panic 的问题,解决 issue #1963 - 修复
GetCellRichText函数在读取没有 SST 索引的单元格时返回错误的问题,解决 issue #1999 - 修复
SetSheetVisible函数在无视图的工作表上 panic 的问题,解决 issue #1969 - 修复零值数字单元格的格式化结果中缺少百分号的问题,解决 issue #1942
- 修复带有负值的散点图中缺少水平坐标轴的问题
- 修复调整绘图对象后缺少形状宏的问题,解决 issue #1957
- 修复某些情况下删除列后条件格式丢失的问题,解决 issue #1968
- 修复读取带有小数值的单元格时的舍入问题,解决 issue #1979
- 支持使用 IEEE 754 “非数字”值或无穷大设置单元格值,解决 issue #119
性能
- 修复 v2.8.0 回归导致的运行速度下降和内存使用增加问题
- 减少
GetRows函数的内存使用,相关 issue #1874 - 优化
ColumnNumberToName函数性能,减少约 50% 的内存使用和 50% 的时间消耗
其他
- 依赖模块已更新
- 单元测试和 godoc 已更新
- 多语言 文档网站(阿拉伯语、德语、英语、西班牙语、法语、日语、韩语、葡萄牙语、俄语、简体中文和繁体中文)已更新。新增意大利语版本文档
致谢
感谢所有为 Excelize 做出贡献的人。以下是此版本中有代码贡献的贡献者列表:
- mirgong (helloWorld)
- YueChenXu-Kimi (岳晨旭)
- JackMin1314 (陈王)
- paolobarbolini (Paolo Barbolini)
- iEvan-lhr (Evan lu)
- yetyear (yeahyear)
- ha5ky (hu5ky)
- lizhichao (vic)
- realzuojianxiang (realzuojianxiang)
- msackman (Matthew Sackman)
- yyle88 (yangyile-yyle88)
- yunkeweb (yunkeweb)
- iraj720 (Nima)
- jianxinhou
- barlevd
- 18409615759 (nna)
- qijinkui (xiaokui)
- user1121114685 (联盟少侠)
- wangsongyan
- vsemichev (Vovka Morkovka)
- zhayt (Aybek)
- ShowerBandV (ShowerBandV)
- imink (Patrick Wang)
- samkeke (wxy)
- pjh591029530
- zhangyimingdatiancai
- wanghaochen2024
- centurion-hub
- peng (Zhang Zhipeng)
- slashdotdash (Ben Smith)
- ArcholSevier
- liuwangchao
- Zncl2222 (Jian Yu, Chen)
更多关于Golang Excelize 2.9.0 发布 - 支持 XLAM/XLSM/XLSX/XLTM/XLTX 的开源 Excel 表格处理库的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang Excelize 2.9.0 发布 - 支持 XLAM/XLSM/XLSX/XLTM/XLTX 的开源 Excel 表格处理库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Excelize 2.9.0 的发布带来了许多重要的功能增强和错误修复,对于处理Excel文件的Go开发者来说是一个值得关注的更新。以下是一些关键变更的示例代码说明:
1. 新增 MoveSheet 函数
此函数允许调整工作簿中工作表的顺序,解决了 issue #1076。
f := excelize.NewFile()
// 添加两个工作表
index1, _ := f.NewSheet("Sheet2")
index2, _ := f.NewSheet("Sheet3")
// 将 Sheet3 移动到 Sheet2 之前
err := f.MoveSheet(index2, index1)
2. 新增 DeleteSlicer 和 GetSlicers 函数
这些函数用于管理切片器,相关 issue #810。
// 获取工作表中的所有切片器
slicers, err := f.GetSlicers("Sheet1")
// 删除指定切片器
err = f.DeleteSlicer("Sheet1", "Slicer1")
3. AddDataValidation 函数现在支持并发安全
解决了 issues #1825,可以在并发场景下安全使用。
dv := excelize.NewDataValidation(true)
dv.SetRange(1, 1, 10, 1)
dv.SetDropList([]string{"A", "B", "C"})
err := f.AddDataValidation("Sheet1", dv)
4. SetCellHyperLink 支持通过 None 链接类型移除超链接
相关 issue #1940。
// 设置超链接
err := f.SetCellHyperLink("Sheet1", "A1", "https://github.com", "External")
// 移除超链接
err = f.SetCellHyperLink("Sheet1", "A1", "", "None")
5. AddChart 支持创建相同类型的组合图表
相关 issue #1940。
err := f.AddChart("Sheet1", "E1", &excelize.Chart{
Type: excelize.Col,
Series: []excelize.ChartSeries{
{Name: "Sheet1!$A$1", Values: "Sheet1!$B$1:$B$5"},
{Name: "Sheet1!$A$2", Values: "Sheet1!$C$1:$C$5"},
},
})
6. 新增支持的公式函数 DOLLAR
// 在单元格中设置 DOLLAR 公式
f.SetCellFormula("Sheet1", "A1", "DOLLAR(1234.567, 2)")
// 计算公式结果
value, err := f.CalcCellValue("Sheet1", "A1")
7. 性能优化示例
ColumnNumberToName 函数性能提升约50%。
// 将列号转换为列名
colName := excelize.ColumnNumberToName(27) // 返回 "AA"
8. 错误修复示例
修复了 RemoveCol 在删除列时返回错误的问题(issue #1829)。
// 删除第2列
err := f.RemoveCol("Sheet1", "B")
这些更新显著提升了Excelize库的稳定性、功能和性能,建议开发者升级到2.9.0版本以利用这些改进。

