1. 首页
  2. 后端

Go语言轻松搞定Excel的操作,简单生成图表

  Go语言轻松搞定Excel的操作,简单生成图表

=======================

原文链接:[mp.weixin.qq.com/s/wFcLSLjUi…](http://cxyroad.com/ "https://mp.weixin.qq.com/s/wFcLSLjUi2pr2giM_g0MBA")

库简介

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。使用本类库要求使用的 Go 语言为 1.18 或更高版本。

开源仓库:github.com/xuri/exceli…

使用

安装库

go get github.com/xuri/excelize/v2

创建Excel

在自己的项目中完成了库的安装后,即可使用Excelize创建一个新的Excel文件。

func main() {
    // 新建文件
    file := excelize.NewFile()
    defer func() {
        err := file.Close()
        if err != nil {
            log.Fatalln("关闭文件异常: ", err)
        }
    }()
    // 新建工作簿
    _, err := file.NewSheet("sheet1")
    if err != nil {
        log.Fatalln("创建工作表失败: ", err)
    }
    // 保存文件
    err = file.SaveAs("test.xlsx")
    if err != nil {
        log.Fatalln("保存文件异常: ", err)
    }
}

上面代码中使用NewFile方法新建Excel文件,并使用NewSheet新建工作表最后使用SaveAs方法保存,代码运行后就会在当前目录生成一个test.xlsx的文件,打开文件可看到文件中包含一个sheet1的工作表。

image.png

打开Excel

除了使用代码创建出一个Excel文件,还可以打开一个已经存在的Excel文件。

func main() {
    file, err := excelize.OpenFile("test.xlsx")
    if err != nil {
        log.Fatalln("打开文件异常: ", err)
    }
    defer func() {
        err := file.Close()
        if err != nil {
            log.Fatalln("关闭文件异常: ", err)
        }
    }()
    // 新建工作簿
    _, err = file.NewSheet("sheet2")
    if err != nil {
        log.Fatalln("创建工作表失败: ", err)
    }
    // 保存文件
    err = file.SaveAs("test.xlsx")
    if err != nil {
        log.Fatalln("保存文件异常: ", err)
    }
}

使用上面代码打开第一步的时候创建的test.xlsx文件,然后在文件中新建一个名为sheet2的工作表并保存,运行代码后再次打开test.xlsx文件即可看到在sheet1后新增了sheet2的工作表。

image.png

写入

func main() {
    file, err := excelize.OpenFile("test.xlsx")
    if err != nil {
        log.Fatalln("打开文件异常: ", err)
    }
    defer func() {
        err := file.Close()
        if err != nil {
            log.Fatalln("关闭文件异常: ", err)
        }
    }()

    // 设置单元格值,参数1为工作表名,参数2为单元格,参数3为值
    file.SetCellStr("sheet1", "A1", "姓名")
    file.SetCellStr("sheet1", "A2", "年龄")

    // 保存文件
    err = file.Save()
    if err != nil {
        log.Fatalln("保存文件异常: ", err)
    }
}

在代码中使用SetCell方法可以写入相应的值到表格中,常见SetCell方法如下:

  • SetCellStr:写入字符类型值
  • SetCellInt:写入整形值
  • SetCellBool:写入布尔类型值
  • SetCellFloat:写入浮点类型值
  • ……

代码运行之后打开test.xlsx文件即可看到对应的单元格已经写入了我们设置好的值

image.png

读取

在读取单元格的时候使用GetCellValue方法,读取的时候没有类型区分,大部分使用这个方法即可。

func readValue() {
    file, err := excelize.OpenFile("test.xlsx")
    if err != nil {
        log.Fatalln("打开文件异常: ", err)
    }
    defer func() {
        err := file.Close()
        if err != nil {
            log.Fatalln("关闭文件异常: ", err)
        }
    }()
    // 设置单元格值,参数1为工作表名,参数2为单元格
    value, err := file.GetCellValue("sheet1", "A1")
    if err != nil {
        log.Fatalln("读取单元格异常: ", err)
    }
    fmt.Println("A1单元格的值为: ", value)
}

在运行代码之后即可在控制台打印出我们读取到的单元格中的值。

image.png

插入图表

先准备一些数据,然后使用Excelize在表格中直接插入图表。

image.png

func main() {
    file, err := excelize.OpenFile("test.xlsx")
    if err != nil {
        log.Fatalln("打开文件异常: ", err)
    }
    defer func() {
        err := file.Close()
        if err != nil {
            log.Fatalln("关闭文件异常: ", err)
        }
    }()
    if err := file.AddChart("Sheet1", "E1", &excelize.Chart{
        Type: excelize.Col3DClustered,
        Series: []excelize.ChartSeries{
            {
                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: []excelize.RichTextRun{
            {
                Text: "Fruit 3D Clustered Column Chart",
            },
        },
    }); err != nil {
        log.Fatalln("插入图表异常: ", err)
    }
    // 保存文件
    err = file.Save()
    if err != nil {
        log.Fatalln("保存文件异常: ", err)
    }
}

上面代码中的AddChart就是像工作表中插入图表,第一个参数为工作表名,第二个参数为插入图表的开始单元格,第三个参数则为图表的样式属性,其中Type属性的Col3DClustered表示三维簇状柱形图(其他的图表类型可查看官方文档),Series 指定了绘制哪些数据的信息集合、图例项(系列)和水平(分类)轴标签。

Series 中的详细参数如下表:

| | 作用 |
| — | — |
| Name | 图例项(系列),在图表图例和公式栏中显示。Name 参数是可选的,如果不指定该值默认将会使用 Series 1 .. n 表示。Name 支持使用公式表示,例如:Sheet1!AAA1。 |
| Categories | 水平(分类)轴标签。在大多数图表类型中,Categories 属性是可选的,默认为形如 1..n 的连续序列。 |
| Values | 图表数据区域,是 Series 中最重要的参数,也是创建图表时唯一的必选参数。该选项将图表与其显示的工作表数据链接起来。 |

运行代码后即可在工作表中插入一张图表。


image.png

原文链接: https://juejin.cn/post/7381339338708451328

文章收集整理于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除,如若转载,请注明出处:http://www.cxyroad.com/17404.html

QR code