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

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

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
  • DataValidationTypeDataValidationErrorStyleDataValidationOperatorPictureInsertType 的数据类型从 int 改为 byte
  • SetCellInt 函数要求 int64 数据类型参数,解决 issue 2068
  • 当添加图片、图表、形状和表单控件等绘图对象时,偏移设置将不再影响绘图对象的大小,相关 issue 2001

重要功能

  • Chart 数据类型中添加新字段 GapWidthOverlap
  • ChartPlotArea 数据类型中添加新字段 ShowDataTableShowDataTableKeys
  • ChartAxis 数据类型中添加新字段 Alignment
  • ChartSeries 数据类型中添加新字段 DataLabel
  • PageLayoutOptions 数据类型添加新字段 PageOrder
  • 添加 2 个新的导出错误变量:ErrPageSetupAdjustToErrStreamSetColStyle
  • 添加 2 个新的导出枚举:HeaderFooterImagePositionTypeIgnoredErrorsType
  • 添加 2 个新的导出数据类型:CalcPropsOptionsHeaderFooterImageOptions
  • 添加 2 个新函数:SetCalcPropsGetCalcProps 支持设置和获取工作簿计算属性
  • 添加新的 CultureNameJaJPCultureNameKoKRCultureNameZhTW 枚举值,支持为日本年号、韩国檀纪年和中华民国年应用数字格式,相关 issue 1885
  • 添加新函数 AddHeaderFooterImage 以支持在页眉和页脚中设置图形,相关 issue 1395
  • 添加新函数 AddIgnoredErrors 支持忽略单元格范围的错误,相关 issue 2046
  • 为流式写入器添加新函数 SetColStyle 以支持设置列样式,相关 issue 2075
  • AddChartAddChartSheet 函数支持设置图表轴文本方向和旋转,相关 issue 2025
  • AddChartAddChartSheet 函数支持为柱形图和条形图设置间隙宽度和重叠,相关 issue 2033
  • AddChartAddChartSheet 函数支持设置图表系列数据标签的格式,相关 issue 2052
  • AddChartAddChartSheet 函数支持为图表设置数据表,相关 issue 2117
  • AddFormControl 函数支持为复选框设置单元格链接,相关 issue 2113
  • SetPageLayout 函数支持设置页面布局的页面顺序
  • 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

1 回复

更多关于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. 数据类型变更

DataValidationTypeDataValidationErrorStyle 等从 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. 新增图表功能

新增的 GapWidthOverlap 字段允许更精细地控制柱形图和条形图的显示。

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 版本要求和数据类型变更。

回到顶部