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页。
读表格中的数据
首先,修改了下Book1.xlsx。
上东西。
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 生成图表十分简单,仅需几行代码。您可以根据工作表中的已有数据构建图表,或向工作表中添加数据并创建图表。
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)
}
}