先给大家看下我们今天的主角:一只可爱的囊地鼠正在准备食用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()
   }
}