Golang Excelize 2.9.0 发布 - 支持 XLAM/XLSM/XLSX/XLTM/XLTX 的开源 Excel 表格处理库

Golang Excelize 2.9.0 发布 - 支持 XLAM/XLSM/XLSX/XLTM/XLTX 的开源 Excel 表格处理库 Excelize 2.9.0 发布

Excelize 是一个用纯 Go 语言编写的库,提供了一系列函数,允许您读写 XLAM / XLSM / XLSX / XLTM / XLTX 文件。支持读写 Microsoft Excel™ 2007 及更高版本生成的电子表格文档。通过高兼容性支持复杂组件,并提供了流式 API,用于从包含大量数据的工作表中生成或读取数据。

GitHub: github.com/xuri/excelize

我们很高兴地宣布 2.9.0 版本的发布。本次更新包含了一些新的功能领域和大量的错误修复。

变更摘要可在 发布说明 中查看。完整的变更列表可在更新日志中找到。

发布说明


本次发布中最值得注意的变更包括:

重大变更

  • ConditionalFormatOptions 结构体字段 Format 的数据类型更改为指针,解决 issue #1867

重要功能

  • 新增函数 DeleteSlicerGetSlicers,相关 issue #810
  • 新增函数 MoveSheet 以支持更改工作簿中的工作表顺序,相关 issue #1076
  • GraphicOptions 数据类型中新增 AutoFitIgnoreAspect 字段,支持用图片填充单元格并忽略其宽高比
  • ChartAxis 数据类型中新增 TickLabelPosition 字段,支持设置图表标签位置
  • PivotTableField 数据类型中新增字段 ShowAllInsertBlankRowNumFmt
  • PivotTableOptions 数据类型中新增字段 ClassicLayoutFieldPrintTitlesItemPrintTitles
  • 引入 2 个新的导出枚举类型 ChartTickLabelPositionTypePictureInsertType
  • 引入新的导出枚举值 ChartLineUnset
  • 引入 4 个常量 ExtURIDataFieldExtURIPivotFieldExtURIPivotFilterExtURIPivotHierarchy
  • 引入新的导出错误变量 ErrPivotTableClassicLayout
  • MergeCell 函数支持在合并单元格时清除从属单元格的值
  • AddDataValidationDeleteDataValidationGetCellStyle 函数支持并发安全,相关 issues #1825
  • GetDataValidations 函数支持获取存储在扩展列表中的数据验证,相关 issue #1835
  • SetSheetName 函数支持区分大小写,相关 issue #1856
  • GetPictureCellsGetPictures 函数支持获取通过 IMAGE 公式函数插入的单元格图片以及图片的绝对路径
  • SetCellHyperLink 函数支持通过 None 链接类型移除超链接,相关 issue #1940
  • AddChart 函数支持创建相同类型的组合图表,相关 issue #1940
  • AddChart 函数支持设置散点图的线型
  • 当使用 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

1 回复

更多关于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. 新增 DeleteSlicerGetSlicers 函数

这些函数用于管理切片器,相关 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版本以利用这些改进。

回到顶部