Golang Excelize 2.8.0 发布 - 强大的开源电子表格(Excel)文档处理库
Golang Excelize 2.8.0 发布 - 强大的开源电子表格(Excel)文档处理库

Excelize 是一个用纯 Go 语言编写的库,提供了一系列函数,允许您读写 XLAM / XLSM / XLSX / XLTM / XLTX 文件。支持读写由 Microsoft Excel™ 2007 及更高版本生成的电子表格文档。通过高兼容性支持复杂组件,并提供了流式 API,用于从包含大量数据的工作表中生成或读取数据。
GitHub: github.com/xuri/excelize
我们很高兴地宣布 2.8.0 版本的发布。此次更新包含了一系列新功能领域和大量错误修复。
变更摘要可在发布说明中查看。完整的变更列表可在更新日志中找到。
发布说明
此版本中最值得注意的变更包括:
重大变更
- 将导出的变量
ErrTableNameLength重命名为ErrNameLength - 将导出的类型
PaneOptions重命名为Selection - 在导出的
Comment数据类型中,将Runs字段重命名为Paragraph - 移除
Style数据类型中的Lang字段 - 移除了导出的
ChartTitle数据类型,并使用RichTextRun数据类型替代 - 将
DecimalPlaces的数据类型更改为整数指针 - 更改默认的点到像素转换因子,解决问题 #279 和 #1536
- 更改
AddShape函数签名:func (f *File) AddShape(sheet, cell string, opts *Shape) error改为func (f *File) AddShape(sheet string, opts *Shape) error
重要特性
- 新增导出的错误变量
ErrExistsTableName和ErrorFormControlValue - 在
Options数据类型中新增选项ShortDatePattern、LongDatePattern、LongTimePattern和CultureInfo,相关议题 #1199 - 新增导出的
CultureName枚举数据类型,用于国家代码 - 新增函数
GetTables和DeleteTable支持获取和删除表格,相关议题 #674 和 #1454 - 新增函数
GetStyle支持获取样式定义,相关议题 #314、#1520 和 #1521 - 支持对单元格值应用占位符、填充、数字舍入、货币、会计格式和切换参数数字格式,并支持为 812 种语言标签应用日期和时间数字格式,相关议题 #660
- 新增支持 10 个公式函数:ARRAYTOTEXT, FORECAST, FORECAST.LINEAR, FREQUENCY, INTERCEPT, ODDFYIELD, ODDLPRICE, ODDLYIELD, PROB, VALUETOTEXT
- 在错误信息中添加文件路径长度限制详情
- 新增函数
GetPanes支持获取工作表窗格和视图选择 - 新增函数
AddFormControl、GetFormControls和DeleteFormControl支持表单控件,相关议题 #301 和 #1169 AddChart函数支持设置主标题,相关议题 #1553AddChart函数支持创建带有次要系列轴的图表,相关议题 #518AddChart函数支持为图表设置格式化和富文本标题,相关议题 #1588- 为
AddShape函数添加形状类型检查,如果未指定形状类型将返回错误 - 支持读取由日本日历数字格式格式化的单元格值,相关议题 #1590
GetPictures函数支持读取单单元格锚定图片,相关议题 #1585NewConditionalStyle函数支持创建带有数字格式和保护的条件格式,相关议题 #1610
提升兼容性
- 支持检查包含多字节字符的单元格值长度,相关议题 #1517
- 防止创建重复的表格和同名的定义名称
- 提升单元格注释框形状大小与金山 WPS 的兼容性
- 支持在工作表格式属性中回退到默认列宽,相关议题 #1536
- 使内部工作表 XML 路径对大小写不敏感以提高兼容性,相关议题 #1591
错误修复
- 在检查单元格值长度后转义 XML 字符,修复流式写入器生成的文件损坏问题,解决问题 #1518、#1519 和 #1530
- 修复多行纯文本注释的注释框大小不正确的问题
- 防止将文本单元格值格式化为数字,解决问题 #1523、#1528 和 #1533
- 修复并发安全函数的竞态条件
- 修复日期时间毫秒舍入不正确的问题
- 修复日期和时间在 AM 12 小时制下数字格式化结果不正确的问题
- 修复公式函数 SUMIFS 和 AVERAGEIFS 结果不正确的问题,解决问题 #1564
- 修复计算引擎中基本算术运算符优先级问题,解决问题 #1599
- 修复公式计算引擎的跨工作表引用问题
- 修复删除行后调整表格的问题,解决问题 #1539
- 支持获取单个单元格中的多个图像,解决问题 #1548
- 修复在某些情况下添加的图片位置不正确的问题,解决问题 #1560
- 支持在插入列和行时调整公式,修复因插入列或行导致的工作簿损坏问题,解决问题 #1565
- 公式函数 CONCAT、CONCATENATE 支持连接多个单元格值,解决问题 #1569
- 修复嵌套参数函数返回数值结果时公式计算结果不正确的问题,解决问题 #1582
- 修复内部图形对象计数器问题导致的添加图片重复问题,解决问题 #1584
- 修复因小时舍入问题导致的读取日期时间单元格结果不正确的问题,解决问题 #1587
- 修复获取起始和结束坐标相同的合并单元格时发生 panic 的问题
性能
- 优化正则表达式调用以提高性能,相关议题 #1532
- 避免不必要的字节/字符串转换,相关议题 #1541
其他
- 已更新依赖模块
- 简化变量声明和错误返回语句
- 移除内置语言数字格式代码与 Unicode 值的映射
- 移除内部
xlsxTabColor数据类型,使用xlsxColor数据类型替代xlsxTabColor - 更新了单元测试和 godoc
- 更新了多语言文档网站,支持阿拉伯语、德语、西班牙语、英语、法语、俄语、中文、日语和韩语
致谢
感谢所有为 Excelize 做出贡献的人。以下是此版本中有代码贡献的贡献者列表:
- IAkumaI (Valery Ozarnichuk)
- sillydong (陈志东)
- fudali113 (fudali)
- Juneezee (Eng Zer Jun)
- joehan109
- yicixin (壹次心)
- vb6iscool
- chengcxy (chengxinyao)
- lidp20
- JDavidVR (David)
- fsfsx
- cnmlgbgithub
更多关于Golang Excelize 2.8.0 发布 - 强大的开源电子表格(Excel)文档处理库的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang Excelize 2.8.0 发布 - 强大的开源电子表格(Excel)文档处理库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Excelize 2.8.0 的发布确实带来了许多重要的改进和新功能。以下是一些关键变更的示例代码,帮助大家快速了解如何使用部分新特性。
1. 获取和删除表格
新增的 GetTables 和 DeleteTable 函数使得表格操作更加方便。
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func main() {
f, err := excelize.OpenFile("book1.xlsx")
if err != nil {
fmt.Println(err)
return
}
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
// 获取所有表格
tables, err := f.GetTables("Sheet1")
if err != nil {
fmt.Println(err)
return
}
for _, table := range tables {
fmt.Println(table)
}
// 删除指定表格
if err := f.DeleteTable("Sheet1", "Table1"); err != nil {
fmt.Println(err)
}
}
2. 获取样式定义
GetStyle 函数允许你获取单元格的样式定义。
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func main() {
f := excelize.NewFile()
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
styleID, err := f.NewStyle(&excelize.Style{
Font: &excelize.Font{Color: "1265BE", Bold: true},
})
if err != nil {
fmt.Println(err)
return
}
if err := f.SetCellStyle("Sheet1", "A1", "A1", styleID); err != nil {
fmt.Println(err)
return
}
// 获取样式定义
style, err := f.GetStyle(styleID)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%+v\n", style)
}
3. 新增公式函数
此版本新增了10个公式函数,例如 VALUETOTEXT。
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func main() {
f := excelize.NewFile()
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
// 在单元格中设置公式
if err := f.SetCellFormula("Sheet1", "A1", "VALUETOTEXT(123)"); err != nil {
fmt.Println(err)
return
}
// 计算公式
result, err := f.CalcCellValue("Sheet1", "A1")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(result) // 输出: 123
}
4. 表单控件支持
新增的 AddFormControl 等函数允许在Excel中添加表单控件。
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func main() {
f := excelize.NewFile()
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
if err := f.AddFormControl("Sheet1", excelize.FormControl{
Cell: "A1",
Type: excelize.FormControlButton,
Text: "Click Me",
}); err != nil {
fmt.Println(err)
}
if err := f.SaveAs("Book1.xlsx"); err != nil {
fmt.Println(err)
}
}
5. 带富文本标题的图表
AddChart 现在支持为图表设置格式化和富文本标题。
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func main() {
f := excelize.NewFile()
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
for idx, row := range [][]interface{}{
{"Apple", "Orange"},
{1, 2},
{3, 4},
} {
cell, err := excelize.CoordinatesToCellName(1, idx+1)
if err != nil {
fmt.Println(err)
return
}
if err := f.SetSheetRow("Sheet1", cell, &row); err != nil {
fmt.Println(err)
return
}
}
if err := f.AddChart("Sheet1", "E1", &excelize.Chart{
Type: excelize.Col3DClustered,
Series: []excelize.ChartSeries{
{
Name: "Sheet1!$A$1",
Categories: "Sheet1!$A$2:$A$3",
Values: "Sheet1!$B$2:$B$3",
},
},
Title: []excelize.RichTextRun{
{Text: "Sales ", Font: &excelize.Font{Bold: true, Color: "1265BE"}},
{Text: "Report", Font: &excelize.Font{Italic: true, Color: "CC0000"}},
},
}); err != nil {
fmt.Println(err)
return
}
if err := f.SaveAs("Book1.xlsx"); err != nil {
fmt.Println(err)
}
}
6. 新增形状类型检查
AddShape 函数现在会检查形状类型,如果未指定将返回错误。
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func main() {
f := excelize.NewFile()
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
// 正确的形状添加
if err := f.AddShape("Sheet1", &excelize.Shape{
Cell: "A1",
Type: excelize.ShapeOval,
}); err != nil {
fmt.Println(err)
}
// 未指定类型将返回错误
if err := f.AddShape("Sheet1", &excelize.Shape{
Cell: "B1",
}); err != nil {
fmt.Println(err) // 输出错误: shape type is required
}
}
这些示例展示了Excelize 2.8.0中部分重要新功能的使用方法。更多详细信息和完整API请参考官方文档。

