Golang Excelize 2.3.0 版本发布
Golang Excelize 2.3.0 版本发布
Excelize 是一个用纯 Go 语言编写的库,提供了一系列函数,允许您读写 XLSX / XLSM / XLTM 文件。支持读写由 Microsoft Excel™ 2007 及更高版本生成的电子表格文档。通过高兼容性支持复杂组件,并提供了流式 API,用于从包含大量数据的工作表中生成或读取数据。
GitHub: github.com/xuri/excelize
我们很高兴地宣布 2.3.0 版本的发布。本次更新包含了一些新的功能领域和大量的错误修复。
变更摘要可在 发布说明 中查看。完整的变更列表可在 更新日志 中找到。
发布说明
本次发布中最值得注意的变更有:
重要特性
- 支持并发设置单元格值,相关议题 #670
- 新增 API:
SetSheetFormatPr和GetSheetFormatPr,支持设置和获取工作表格式属性,相关议题 #635 - 新增 API:
GetCols和Cols,支持列迭代器 AddChart支持在 Y 轴上指定对数刻度,相关议题 #661AddPicture支持插入图片自动适应单元格- 增加了总列数、行数和文件名的长度限制
- 公式计算引擎支持定义名称,相关议题 #665
- API
CalcCellValue更新,公式计算引擎持续开发中:已添加 12 个新函数,COUNTA、ISBLANK、ISERR、ISERROR、ISEVEN、ISNA、ISNONTEXT、ISODD、ISNUMBER、MEDIAN、NA、SUMIF
提升兼容性
- 兼容区分大小写的文档部件路径
- 将字符串存储到 SST(共享字符串表),相关议题 #622
- 支持工作表中没有
r属性的row元素 - 支持 XML 多命名空间,使其与金山 WPS™ Office 兼容,相关议题 #651
- 改进了与 Office 2007 - 2010 的自动筛选兼容性,解决 #637
错误修复
- 避免在工作簿定义名称中重复筛选数据库
- 避免创建重复样式,解决 #643
- 为设置富文本转义字符
- 修复了使用 Excelize 创建的电子表格在重新打开后批注形状发生变化的问题,解决 #672
- 修复启用编译器内联标志时的 panic,解决 #677 和 #679
- 修复获取百分比单元格值的精度问题
其他
更多关于Golang Excelize 2.3.0 版本发布的实战教程也可以访问 https://www.itying.com/category-94-b0.html
Excelize 2.3.0 版本的发布带来了多项重要更新,特别是在并发操作、API 增强和兼容性方面。以下是对部分关键特性的代码示例说明:
1. 并发设置单元格值
现在支持使用 goroutine 并发写入单元格,提升大数据量下的写入性能。示例:
package main
import (
"fmt"
"sync"
"github.com/xuri/excelize/v2"
)
func main() {
f := excelize.NewFile()
var wg sync.WaitGroup
for i := 1; i <= 100; i++ {
wg.Add(1)
go func(row int) {
defer wg.Done()
cell, _ := excelize.CoordinatesToCellName(1, row)
f.SetCellValue("Sheet1", cell, fmt.Sprintf("并发数据%d", row))
}(i)
}
wg.Wait()
f.SaveAs("并发示例.xlsx")
}
2. 新增列迭代器 API GetCols 和 Cols
GetCols 可一次性获取所有列数据,Cols 提供流式迭代支持。示例:
// GetCols 示例
cols, err := f.GetCols("Sheet1")
if err != nil {
fmt.Println(err)
return
}
for _, col := range cols {
for _, cell := range col {
fmt.Print(cell, "\t")
}
fmt.Println()
}
// Cols 迭代器示例
cols, err := f.Cols("Sheet1")
if err != nil {
fmt.Println(err)
return
}
for cols.Next() {
col, _ := cols.Rows()
for _, cell := range col {
fmt.Print(cell, "\t")
}
fmt.Println()
}
3. 工作表格式属性 API
新增 SetSheetFormatPr 和 GetSheetFormatPr 用于设置和获取工作表基础格式。示例:
// 设置默认行高和列宽
err := f.SetSheetFormatPr("Sheet1",
excelize.BaseColWidth(10),
excelize.DefaultRowHeight(20),
)
if err != nil {
fmt.Println(err)
}
// 获取格式属性
formatPr, err := f.GetSheetFormatPr("Sheet1")
if err != nil {
fmt.Println(err)
}
fmt.Printf("默认行高: %v\n", formatPr.DefaultRowHeight)
4. 图表 Y 轴对数刻度支持
AddChart 现在支持为 Y 轴配置对数刻度。示例:
if err := f.AddChart("Sheet1", "E1", &excelize.Chart{
Type: excelize.Col,
Series: []excelize.ChartSeries{
{
Name: "Sheet1!$A$1",
Categories: "Sheet1!$B$1:$B$5",
Values: "Sheet1!$A$1:$A$5",
},
},
Format: excelize.GraphicOptions{ScaleX: 1, ScaleY: 1},
YAxis: excelize.ChartAxis{
LogarithmicBase: 10, // 设置 Y 轴为以10为底的对数刻度
},
}); err != nil {
fmt.Println(err)
}
5. 图片自适应单元格
AddPicture 新增 FitCell 选项,使图片自动适应单元格尺寸。示例:
// 插入图片并自适应到单元格 B2
err := f.AddPicture("Sheet1", "B2", "image.png",
&excelize.GraphicOptions{
FitCell: true, // 启用自适应
Positioning: "oneCell",
},
)
6. 公式计算引擎增强
新增 12 个函数支持,例如 SUMIF 和 MEDIAN。示例:
f.SetCellFormula("Sheet1", "C1", "SUMIF(A1:A10,\">5\",B1:B10)")
// 计算公式结果
result, err := f.CalcCellValue("Sheet1", "C1")
if err != nil {
fmt.Println(err)
}
fmt.Println("SUMIF 结果:", result)
7. 兼容性改进
修复了与 WPS Office 的兼容性问题,现在可正确处理多命名空间 XML。示例中无需额外代码,库已自动处理。
错误修复示例
修复了批注形状变化问题,现在插入批注后保存再打开不会变形:
err := f.AddComment("Sheet1", "A1", `{"author":"Excelize: ","text":"这是一个批注"}`)
if err != nil {
fmt.Println(err)
}
这些更新显著提升了 Excelize 在性能、功能和兼容性方面的表现,建议升级到 2.3.0 版本以利用新特性。

