golang Excel数据绑定到Go结构体的插件库exl的使用
golang Excel数据绑定到Go结构体的插件库exl的使用
exl是一个将Excel数据绑定到Go结构体的库(仅支持Go1.18+版本)。
读取Excel
package main
import (
"fmt"
"github.com/go-the-way/exl"
)
// 定义结构体,使用excel标签指定Excel列名
type ReadExcel struct {
ID int `excel:"ID"`
Name string `excel:"Name"`
}
// 实现ReadConfigure方法用于配置读取选项
func (*ReadExcel) ReadConfigure(rc *exl.ReadConfig) {}
func main() {
// 读取Excel文件并绑定到结构体切片
if models, err := exl.ReadFile[*ReadExcel]("/to/path.xlsx"); err != nil {
fmt.Println("read excel err:" + err.Error())
} else {
fmt.Printf("read excel num: %d\n", len(models))
}
}
写入Excel
package main
import (
"fmt"
"github.com/go-the-way/exl"
)
// 定义结构体,使用excel标签指定Excel列名
type WriteExcel struct {
ID int `excel:"ID"`
Name string `excel:"Name"`
}
// 实现WriteConfigure方法用于配置写入选项
func (m *WriteExcel) WriteConfigure(wc *exl.WriteConfig) {}
func main() {
// 将结构体切片写入Excel文件
if err := exl.Write("/to/path.xlsx", []*WriteExcel{{100, "apple"}, {200, "pear"}}); err != nil {
fmt.Println("write excel err:" + err.Error())
} else {
fmt.Println("write excel done")
}
}
高级写入功能
package main
import (
"fmt"
"github.com/go-the-way/exl"
)
func main() {
// 创建新的Writer
w := exl.NewWriter()
// 写入基本类型切片
if err := w.Write("int", []int{1, 2}); err != nil {
fmt.Println(err)
return
}
// 写入浮点数切片
if err := w.Write("float", []float64{1.1, 2.2}); err != nil {
fmt.Println(err)
return
}
// 写入字符串切片
if err := w.Write("string", []string{"hello", "world"}); err != nil {
fmt.Println(err)
return
}
// 写入map切片
if err := w.Write("map", []map[string]string{{"id":"1000","name":"hello"},{"id":"2000","name":"world"}}); err != nil {
fmt.Println(err)
return
}
// 写入匿名结构体切片
if err := w.Write("structWithField", []struct{ID int}{{1000},{2000}}); err != nil {
fmt.Println(err)
return
}
// 写入带标签的结构体切片
if err := w.Write("structWithTag", []struct{ID int `excel:"编号"`}{{1000},{2000}}); err != nil {
fmt.Println(err)
return
}
// 写入带标签和忽略字段的结构体切片
if err := w.Write("structWithTagAndIgnore", []struct{
ID int `excel:"编号"`
Extra int `excel:"-"`
Name string `excel:"名称"`
}{{1000,0,"Coco"},{2000,0,"Apple"}}); err != nil {
fmt.Println(err)
return
}
// 保存到文件
if err := w.SaveTo("dist.xlsx"); err != nil {
fmt.Println(err)
return
}
}
以上示例展示了如何使用exl库进行Excel文件的读取和写入操作,包括基本类型、map和结构体的处理,以及如何使用标签来控制Excel列的映射。
更多关于golang Excel数据绑定到Go结构体的插件库exl的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang Excel数据绑定到Go结构体的插件库exl的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用exl库实现Excel数据到Go结构体的绑定
exl是一个用于将Excel数据绑定到Go结构体的轻量级库,它可以帮助开发者快速地将Excel表格数据映射到Go的结构体中,简化数据处理流程。
安装exl库
首先需要安装exl库:
go get github.com/go-the-way/exl
基本使用方法
1. 定义结构体
首先定义一个与Excel表格对应的结构体,使用结构体标签来指定Excel列名:
type Student struct {
ID int `excel:"学号"`
Name string `excel:"姓名"`
Age int `excel:"年龄"`
Score float64 `excel:"成绩"`
Class string `excel:"班级"`
}
2. 读取Excel文件并绑定到结构体
package main
import (
"fmt"
"github.com/go-the-way/exl"
)
func main() {
// 定义接收数据的切片
var students []Student
// 读取Excel文件
err := exl.ReadToModel("students.xlsx", &students)
if err != nil {
panic(err)
}
// 打印读取的数据
for _, student := range students {
fmt.Printf("%+v\n", student)
}
}
高级功能
1. 自定义Sheet名称
默认读取第一个Sheet,可以指定Sheet名称:
err := exl.ReadToModel("students.xlsx", &students, exl.WithSheetName("Sheet2"))
2. 从指定行开始读取
err := exl.ReadToModel("students.xlsx", &students, exl.WithStartRow(2)) // 从第2行开始
3. 自定义列映射
如果Excel列名与结构体字段名不一致,可以使用excel
标签指定:
type Student struct {
ID int `excel:"学号"`
Name string `excel:"姓名"`
// ...
}
4. 写入数据到Excel
exl也支持将结构体数据写入Excel文件:
err := exl.WriteFromModel("output.xlsx", students)
完整示例
package main
import (
"fmt"
"github.com/go-the-way/exl"
)
type Employee struct {
ID int `excel:"员工ID"`
Name string `excel:"姓名"`
Department string `excel:"部门"`
Salary float64 `excel:"薪资"`
JoinDate string `excel:"入职日期"`
}
func main() {
// 读取Excel数据
var employees []Employee
err := exl.ReadToModel("employees.xlsx", &employees, exl.WithStartRow(2))
if err != nil {
panic(err)
}
// 处理数据
for _, emp := range employees {
fmt.Printf("员工: %s, 部门: %s, 薪资: %.2f\n", emp.Name, emp.Department, emp.Salary)
}
// 修改数据
employees[0].Salary = employees[0].Salary * 1.1
// 写入新文件
err = exl.WriteFromModel("employees_updated.xlsx", employees)
if err != nil {
panic(err)
}
fmt.Println("数据处理完成并已保存到新文件")
}
注意事项
- Excel文件的第一行通常作为列标题行
- 结构体字段类型需要与Excel单元格数据类型匹配
- 对于日期类型,建议在Excel中使用字符串格式,然后在Go中进行转换
- 如果单元格为空,对应的结构体字段将是零值
exl库提供了一种简单直接的方式来处理Excel数据,特别适合需要快速将Excel数据导入到Go程序中进行处理的场景。对于更复杂的需求,可能需要考虑使用更强大的库如tealeg/xlsx或excelize。