先给大家看下我们今天的主角:一只可爱的囊地鼠正在准备食用Excel~
GitHub链接:https://github.com/qax-os/excelize
Excelize是一个用纯Go语言编写的库,提供了一组函数,可以对XLAM / XLSM / XLSX / XLTM / XLTX文件进行读写。支持读写由Microsoft Excel™2007及以后版本生成的电子表格文档。通过高兼容性支持复杂组件,并提供流API从具有大量数据的工作表中生成或读取数据。该库需要Go 1.16或更高版本。
那么本篇文章将会介绍我们操作Excel的常用功能,如下:
- 生成一个新的Excel文件
- 向Excel文件中追加内容
- 解析Excel文件内容
- 使用Http协议上传并解析Excel文件
- 使用Http协议将数据转换为Excel文件并下载
1 下载依赖库
go get github.com/xuri/excelize
# Go Modules使用这个命令
go get github.com/xuri/excelize/v2
2 具体操作
2.1 生成一个新的Excel文件
func WriteNewExcel() {
f := excelize.NewFile()
// 创建一个sheet
index := f.NewSheet("Sheet2")
// 根据sheet和坐标 确定一个值
// 例如f.SetCellValue("Sheet2", "A2", "Hello world.")就是在Sheet表中A列第2行的格子里填入Hello world.
f.SetCellValue("Sheet2", "A2", "Hello world.")
f.SetCellValue("Sheet1", "B1", 100)
f.SetCellValue("Sheet1", "B2", 100)
// 将新的sheet添加到Excel中
f.SetActiveSheet(index)
// 保存Excel
if err := f.SaveAs("Book1.xlsx"); err != nil {
fmt.Println(err)
}
}
2.2 向Excel文件中追加内容
func WriteExcel() {
f, _ := excelize.OpenFile("Book1.xlsx")
index := f.NewSheet("Sheet2")
f.SetCellValue("Sheet2", "A2", "Hello world.")
f.SetCellValue("Sheet1", "B1", 100)
f.SetCellValue("Sheet1", "B2", 100)
f.SetActiveSheet(index)
if err := f.SaveAs("Book1.xlsx"); err != nil {
fmt.Println(err)
}
}
2.3 解析Excel文件内容
func ReadExcel() {
f, err := excelize.OpenFile("Book1.xlsx")
if err != nil {
fmt.Println(err)
return
}
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
// 根据sheet和坐标读取某一个格子的值
cell, err := f.GetCellValue("Sheet1", "B2")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(cell)
// 按行读取全部
rows, err := f.GetRows("Sheet1")
if err != nil {
fmt.Println(err)
return
}
for _, row := range rows {
for _, colCell := range row {
fmt.Print(colCell, "\t")
}
fmt.Println()
}
}