Go语言轻松搞定Excel的操作,简单生成图表
库简介
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。使用本类库要求使用的 Go 语言为 1.17 或更高版本
开源仓库:github.com/xuri/excelize
创建Excel
1、在自己的项目中完成了库的安装后,即可使用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)
}
}
2、写入
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文件即可看到对应的单元格已经写入了我们设置好的值
3、读取单个和批量读取
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
"log"
)
//
func readValue1() {
file, err := excelize.OpenFile("test.xlsx")
// 设置单元格值,参数1为工作表名,参数2为单元格
value, err := file.GetCellValue("sheet1", "A1")//单个获取
if err != nil {
log.Fatalln("读取单元格异常: ", err)
}
fmt.Println("A1单元格的值为: ", value)
}
func readValue(){
f,_:= excelize.OpenFile("test.xlsx")
defer f.Close()
// Get all the rows in the Sheet1.
rows,_:= f.GetRows("Sheet1")
for _,row := range rows {
for _,cellValue:= range row {
fmt.Print(cellValue,"\t")
}
fmt.Println()
}
}
func main() {
readValue()
}
4、写入文件内容
liseList:=[][]interface{}{
{"标题信息", "Apple", "Orange", "Pear"},
{"Small", 2, 3, 3},
{"Normal", 5, 2, 4},
{"Large", 6, 7, 8},
}
for idx,row:=range liseList{
cell,_:= excelize.CoordinatesToCellName(4, idx+1)//从哪个位置开始写入转换为execl认识坐标
f.SetSheetRow("Sheet1", cell, &row)
}
f.SaveAs("test.xlsx")