Go开源库Excelize介绍,电子Excel表格操作强大的库

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。

项目作者是续 日,现任阿里巴巴软件工程师,曾就职百度,奇虎360公司。前百度Go语言编程委员会成员,开源软件爱好者,https://github.com/xuri。

可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支 持 XLSX / XLSM / XLTM 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组 件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。

可应用于各类报表平台、云计 算、边缘计算等系统。入选 2020 Gopher China - Go 领域明星开源项目 (GSP)、2018 年开源中国 码云最有价值开源项目 (Gitee Most Valuable Project) https://github.com/xuri/excelize

详细介绍和使用地址:https://xuri.me/excelize/zh-hans/

视频介绍:https://www.sohu.com/a/376820227_120230553

项目初衷

提起电子表格大家都比较熟悉,以 Excel 为代表的经典电子表格已经应用在各行各业当中,根据相关研究机构的估算数据,办公文档产生的数量每年至少以数十亿的规模增长。

电子表格文档作为一种数据承载的重要载体,在很多领域都有应用。作为开发者,一些情况下需要用编程的方式操作这些电子表格文档,起初为了满足从报表系统中导出数据的需要,Excelize 的作者续日调研了市面上多个主流语言的相关基础库,希望能够找到一个高性能、支持复杂样式并且还能够跨平台的解决方案,可是经过一番寻找并没有找到能够满足业务复杂需要的开源实现,就这样他决定从文档格式标准开始入手,从零开始使用 Go 语言实现一个兼顾性能和兼容性的电子表格文档基础库。总结发起 Excelize 项目的初衷可以归结为以下 6 点:

  • 电子表格办公文档有着广泛的应用

  • 自动化电子表格文档处理系统与云计算、边缘计算场景融合

  • 开发者需要通过编程方式处理 Excel 文档

  • 对复杂或包含大规模数据的 Excel 文档进行操作的需求

  • 文档格式领域难以完全实现的复杂技术标准

  • 开源领域、Go 语言缺少具备良好兼容性的基础库

简单的使用:

向 Excel 中插入图表

package main
 
import (
    "fmt"
 
    "github.com/360EntSecGroup-Skylar/excelize"
)
 
func main() {
    categories := map[string]string{"A2": "Small", "A3": "Normal", "A4": "Large", "B1": "Apple", "C1": "Orange", "D1": "Pear"}
    values := map[string]int{"B2": 2, "C2": 3, "D2": 3, "B3": 5, "C3": 2, "D3": 4, "B4": 6, "C4": 7, "D4": 8}
    f := excelize.NewFile()
    for k, v := range categories {
        f.SetCellValue("Sheet1", k, v)
    }
    for k, v := range values {
        f.SetCellValue("Sheet1", k, v)
    }
    err := f.AddChart("Sheet1", "E1", `{"type":"col3DClustered","series":[{"name":"Sheet1!$A$2","categories":"Sheet1!$B$1:$D$1","values":"Sheet1!$B$2:$D$2"},{"name":"Sheet1!$A$3","categories":"Sheet1!$B$1:$D$1","values":"Sheet1!$B$3:$D$3"},{"name":"Sheet1!$A$4","categories":"Sheet1!$B$1:$D$1","values":"Sheet1!$B$4:$D$4"}],"title":{"name":"Fruit 3D Clustered Column Chart"}}`)
    if err != nil {
        fmt.Println(err)
        return
    }
    // Save xlsx file by the given path.
    err = f.SaveAs("./Book1.xlsx")
    if err != nil {
        fmt.Println(err)
    }
}

Excel 中插入图片:

package main
 
import (
    "fmt"
    _ "image/gif"
    _ "image/jpeg"
    _ "image/png"
 
    "github.com/360EntSecGroup-Skylar/excelize"
)
 
func main() {
    f, err := excelize.OpenFile("./Book1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    // Insert a picture.
    err = f.AddPicture("Sheet1", "A2", "./image1.png", "")
    if err != nil {
        fmt.Println(err)
    }
    // Insert a picture to worksheet with scaling.
    err = f.AddPicture("Sheet1", "D2", "./image2.jpg", `{"x_scale": 0.5, "y_scale": 0.5}`)
    if err != nil {
        fmt.Println(err)
    }
    // Insert a picture offset in the cell with printing support.
    err = f.AddPicture("Sheet1", "H2", "./image3.gif", `{"x_offset": 15, "y_offset": 10, "print_obj": true, "lock_aspect_ratio": false, "locked": false}`)
    if err != nil {
        fmt.Println(err)
    }
    // Save the xlsx file with the origin path.
    err = f.Save()
    if err != nil {
        fmt.Println(err)
    }
}

猜你喜欢

转载自blog.csdn.net/qq8864/article/details/113891529