Excelize-go语言实现的Excel库

介绍

Excelize是一个用纯Go编写的库,它提供了一组函数,允许您写入和读取XLAM / XLSM / XLSX / XLTM / XLTX文件。支持读取和编写由 Microsoft Excel™ 2007 及更高版本生成的电子表格文档。通过高兼容性支持复杂组件,并提供流式 API,用于从包含大量数据的工作表中生成或读取数据。此库需要Go 版本 1.15 或更高版本。完整的API文档可以使用go的内置文档工具查看,也可以在go.dev文档参考中在线查看。

功能确实很强大哈,👉GitHub链接

官方中文文档👉点这里

基本用法

下载

go get github.com/xuri/excelize/v2

创建表格

创建一个简易的excel文件。

package main

import (
	"fmt"

	"github.com/xuri/excelize/v2"
)

func main() {
	file := excelize.NewFile()                        //新建一个excel文件
	index := file.NewSheet("sheet页1")                 //新建一个sheet页,参数sheet页名称
	file.SetCellValue("sheet页1", "A2", "hello world") //给sheet页1 中 A2 单元格写入"hello world"
	file.SetCellValue("Sheet1", "B2", 100)            //如果不直接创建,会创建默认的sheet1
	file.SetCellValue("Sheet页2", "B2", 100)           //这一行不会生效
	file.SetActiveSheet(index)                        //设置活动的工作表为index
	if err := file.SaveAs("Book1.xlsx"); err != nil { //保存为excel文件,传入文件路径参数
		fmt.Println(err)
	}
}

这里就创建了一个简单的excel文件并给单元格中写值。注意这里的SetCellValue方法,传入Sheet+数字会创建默认的Sheet页并按数字顺序排列。传入其他字符串不会新建一个以该字符串命名的Sheet页。

img

读表格中的数据

首先,修改了下Book1.xlsx。

img

上东西。

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) //关闭失败打印错误
		}
	}()
	// 读取单个单元格的值
	// 读取刚才创建的Sheet1表格B2单元格的值,这里cell返回的String类型
	cell, err := f.GetCellValue("Sheet1", "B2")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(cell) //100

	// 读取所有行的值
	fmt.Println("开始读取行了")
	rows, err := f.GetRows("Sheet1")
	if err != nil {
		fmt.Println(err)
		return
	}
	for i, row := range rows {
		for _, colCell := range row {
			fmt.Println(colCell, "\t")
		}
		fmt.Printf("这是第%d行\n", i)
	}
}

输出结果:

100
开始读取行了
这是第0行
第二行 
100 
2 
3 
4 
这是添加的 

前面有个空单元格
这是第1行
这是第2行
第四行
1
2





结束了
这是第3行

需要注意的是,GetRows会跳过空行,比如这里的第一行和第三行,因为都是空值,直接省略了。

创建图表

使用 Excelize 生成图表十分简单,仅需几行代码。您可以根据工作表中的已有数据构建图表,或向工作表中添加数据并创建图表。

img

package main

import (
	"fmt"

	"github.com/xuri/excelize/v2"
)

func main() {
	categories := map[string]string{
		"A2": "小",
		"A3": "中等",
		"A4": "大",
		"B1": "苹果",
		"C1": "橘子",
		"D1": "梨",
	}
	values := map[string]int{
		"B2": 2,
		"C2": 3,
		"D2": 15,
		"B3": 5,
		"C3": 2,
		"D3": 3,
		"B4": 9,
		"C4": 10,
		"D4": 6,
	}
	f := excelize.NewFile()
	for k, v := range categories {
		f.SetCellValue("Sheet1", k, v)
	}
	for k, v := range values {
		f.SetCellValue("Sheet1", k, v)
	}
	// 生成图表
	if 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": "3D簇状柱形图-水果"
        }
	}`); err != nil {
		fmt.Println(err)
	}

	// 保存文件到当前路径
	if err := f.SaveAs("Book1.xlsx"); err != nil {
		fmt.Println(err)
	}

}
posted @ 2022-06-14 00:34  Apostle浩  阅读(827)  评论(0编辑  收藏  举报