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

Golang Excelize 2.7.1 发布 - 强大的开源电子表格(Excel)文档处理库 Excelize 2.7.1 Released|333*250

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

GitHub: github.com/xuri/excelize

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

发布说明

此版本中最显著的变化包括:

重大变更

  • 移除了 ChartLine 数据类型中的 Color 字段
  • 将数据类型 ShapeParagraph 替换为 RichTextRun
  • Shape 类型中移除了 Color 字段,并使用 Fill 字段替代
  • 移除了导出的类型 AutoFilterListOptions
  • 将导出的类型 TableOptions 重命名为 Table
  • AddChart 函数要求使用 ChartType 枚举值来指定图表类型
  • 更改了 7 个函数的签名:
    • func (f *File) AutoFilter(sheet, rangeRef string, opts *AutoFilterOptions) error 更改为 func (f *File) AutoFilter(sheet, rangeRef string, opts []AutoFilterOptions) error
    • func (f *File) AddPictureFromBytes(sheet, cell, name, extension string, file []byte, opts *GraphicOptions) error 更改为 func (f *File) AddPictureFromBytes(sheet, cell string, pic *Picture) error
    • func (f *File) GetPicture(sheet, cell string) (string, []byte, error) 更改为 func (f *File) GetPictures(sheet, cell string) ([]Picture, error)
    • func (f *File) AddVBAProject(bin string) error 更改为 func (f *File) AddVBAProject(file []byte) error
    • func (f *File) GetComments() (map[string][]Comment, error) 更改为 func (f *File) GetComments(sheet string) ([]Comment, error)
    • func (f *File) AddTable(sheet, rangeRef string, opts *TableOptions) error 更改为 func (f *File) AddTable(sheet string, table *Table) error
    • func (sw *StreamWriter) AddTable(rangeRef string, opts *TableOptions) error 更改为 func (sw *StreamWriter) AddTable(table *Table) error

显著特性

  • 新增函数 SetSheetDimensionGetSheetDimension 以支持工作簿维度,相关议题 #1463
  • NewStyle 函数支持创建 17 种填充变体样式
  • 将最大单元格样式限制增加到 65430
  • AddPicture 函数允许插入 BMP 格式图像
  • GetPictures 函数支持获取一个单元格中的多个图像
  • SetConditionalFormat 函数支持创建带有“如果为真则停止”或“图标集”规则的条件格式
  • SetConditionalFormat 函数支持为数据条设置边框颜色并创建纯色,相关议题 #1462
  • AddChart 函数支持设置图表数据系列的纯色填充格式,相关议题 #1474
  • AddChart 函数支持设置数据系列中的气泡大小
  • AddChart 函数支持为复合条饼图或复合饼图的第二个绘图区指定数值
  • AddChart 函数支持为图表数据标签和坐标轴设置数字格式,相关议题 #1499
  • AddTable 函数支持在创建表格时指定是否显示表格标题行
  • AddTable 函数支持验证表格名称,并新增了一个错误常量 ErrTableNameLength,相关议题 #1468
  • AutoFilter 函数支持在创建自动筛选时添加多个筛选列
  • CalcCellValue 函数支持指定是否为单元格计算结果应用数字格式样式
  • CalcCellValue 函数支持公式函数 LEFT、LEN、LENB、MID、MIDB、RIGHT 和 RIGHTB 使用双字节字符,相关议题 #1476
  • CalcCellValue 函数现在会在结果中返回公式错误字符串,并在返回的错误中使用错误消息,相关议题 #1490
  • 图像文件扩展名不区分大小写,相关议题 #1503
  • 流式写入器在遇到 nil 值时会跳过设置单元格值,相关议题 #756
  • GetCellHyperLink 函数支持获取合并单元格的单元格超链接
  • 新增导出的数据类型 ChartType 用于表示图表类型枚举

提升兼容性

  • 添加对工作簿函数组的支持
  • 添加对严格主题命名空间的支持,相关议题 #1447
  • 修复因工作簿关系部分不存在而导致的 panic
  • 提高了与包含空白字符的 SST 索引的兼容性,相关议题 #1508

错误修复

  • 修复某些情况下数字格式舍入问题
  • 修复使用时间数字修改字符串单元格时导致的单元格类型不正确问题,解决议题 #1464
  • 修复单元格解析器导致的计算结果不正确问题,解决议题 #1469
  • 修复条件格式数据条最小/最大值不生效的问题,解决议题 #1492
  • 支持 0 行高和列宽,解决议题 #1461

性能

  • 提高了应用月份名称数字格式的性能,相关议题 #1455
  • 加速了检查合并单元格的过程,相关议题 #1448

其他

  • 纯 WebAssembly / Javascript 移植的 Go Excelize 库,名为 excelize-wasm 的 NPM 包已可用于生产环境
  • 已更新依赖模块
  • 更新了单元测试和 godoc
  • 在变量和函数中使用专用名称
  • 包含多语言(阿拉伯语、德语、西班牙语、英语、法语、俄语、中文、日语和韩语)的文档网站已更新

致谢

感谢所有为 Excelize 做出贡献的人。以下是此版本中有代码贡献的贡献者列表:

  • liron-l (Liron Levin)
  • nathj07 (Nathan Davies)
  • Josh-Weston (Josh Weston)
  • jaby
  • FlowingSPDG (Shugo Kawamura)
  • barismar (Baris Mar Aziz)
  • doingNobb (张涛)
  • rpoetrap (Rizki Putra)
  • huangshaokun
  • CHANTXU64 (ChantXu64)
  • playGitboy

更多关于Golang Excelize 2.7.1 发布 - 强大的开源电子表格(Excel)文档处理库的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang Excelize 2.7.1 发布 - 强大的开源电子表格(Excel)文档处理库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Excelize 2.7.1 的发布确实带来了不少重要更新,特别是 API 的调整和新功能的加入。下面针对几个关键变更给出示例代码:

1. AddPictureFromBytes 函数变更示例

旧版本:

err := f.AddPictureFromBytes("Sheet1", "A1", "logo", ".png", imgBytes, &excelize.GraphicOptions{...})

新版本:

pic := &excelize.Picture{
    File:       imgBytes,
    Format:     &excelize.GraphicOptions{...},
}
err := f.AddPictureFromBytes("Sheet1", "A1", pic)

2. AutoFilter 函数支持多列筛选

err := f.AutoFilter("Sheet1", "A1:D10", []excelize.AutoFilterOptions{
    {Column: "B", Expression: "x > 0"},
    {Column: "C", Expression: "y < 10"},
})

3. AddTable 函数使用新签名

err := f.AddTable("Sheet1", &excelize.Table{
    Range:     "A1:D10",
    Name:      "Table1",
    StyleName: "TableStyleMedium2",
})

4. 新增图表类型枚举使用

err := f.AddChart("Sheet1", "E1", &excelize.Chart{
    Type: excelize.Col3DClustered,
    Series: []excelize.ChartSeries{...},
})

5. 获取单元格多个图片

pics, err := f.GetPictures("Sheet1", "A1")
for _, pic := range pics {
    fmt.Println(pic.Extension, len(pic.File))
}

6. 条件格式设置数据条边框

err := f.SetConditionalFormat("Sheet1", "A1:A10", []excelize.ConditionalFormatOptions{
    {
        Type:     "dataBar",
        Criteria: "=",
        Format:   0,
        MinType:  "num",
        MaxType:  "num",
        BarBorderColor: "#FF0000",
    },
})

这些 API 变更虽然需要代码调整,但新设计更加一致和灵活。特别是 PictureTable 结构体的引入,让相关操作更符合 Go 语言的惯用法。

回到顶部