库简介
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)
	}
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

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)
	}
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

在代码中使用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()
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.

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")
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.