开发者

一文带你搞懂Go如何读写Excel文件

开发者 https://www.devze.com 2022-12-04 10:56 出处:网络 作者: Barry
目录1.下载依赖库2.具体操作2.1 生成一个新的Excel文件2.2 向Excel文件中追加内容2.3 解析Excel文件内容2.4 使用Http协议上传并解析Excel文件2.5 使用Http协议将数据转换为Excel文件并下载3.小总结Excelize是一个用纯
目录
  • 1.下载依赖库
  • 2.具体操作
    • 2.1 生成一个新的Excel文件
    • 2.2 向Excel文件中追加内容
    • 2.3 解析Excel文件内容
    • 2.4 使用Http协议上传并解析Excel文件
    • 2.5 使用Http协议将数据转换为Excel文件并下载
  • 3.小总结

    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表中Awww.devze.com列第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 {
        php  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()
       }
    }
    

    2.4 使开发者_C学习用Http协议上传并解析Excel文件

    func HttpReadExcel()编程客栈 {
       f := func(read io.Reader) {
          file, err := excelize.OpenReader(read)
          if err != nil {
             fmt.Println(err)
             return
          }
          for _, item := range file.GetSheetList() {
             rows, _ := file.GetRows(item)
             // rows是一个二维数组
             for i := range rows {
                strs := rows[i]
                for j := range strs {
                   str := rows[i][j]
                   fmt.Println(str)
                }
             }
          }
       }
       http.HandleFunc("/excel", func(w handroidttp.ResponseWriter, r *http.Request) {
          file, _, err := r.FormFile("file")
          if err != nil {
             fmt.Println(err)
             return
          }
          fileBytes, err := ioutil.ReadAll(file)
          if err != nil {
             fmt.Println(err)
             return
          }
          reader := bytes.NewReader(fileBytes)
          f(reader)
          w.Write([]byte("Hello Http Get!"))
       })
       http.ListenAndServe(":8080", nil)
    }
    

    2.5 使用Http协议将数据转换为Excel文件并下载

    func HttpDownloadExcel() {
       fun := func(fileName string) *bytes.Rephpader {
          f := excelize.NewFile()
          f.SetCellValue("Sheet1", "B1", 100)
          err := f.SaveAs(fileName)
          if err != nil {
             fmt.Println(err)
          }
          var buffer bytes.Buffer
          _ = f.Write(&buffer)
          return bytes.NewReader(buffer.Bytes())
       }
       http.HandleFunc("/downloadExcel", func(w http.ResponseWriter, r *http.Request) {
          reader := fun("Book2.xlsx")
          // 重新设置文件名称
          w.Header().Set("Content-Disposition", "attachment; filename="+"Book2.xlsx")
          io.Copy(w, reader)
       })
       http.ListenAndServe(":8080", nil)
    }
    

    3.小总结

    以上功能只需灵活扩展后基本上就可以覆盖大部分业务了,但是有一点需要注意,在2.5使用Http协议将数据转换为Excel文件并下载这个操作中,需要将文件进行重命名,这个名称可以自定义,也可以由服务端指定,但是需要以相关文件类型的名称做后缀,否则会输出zip压缩文件,很难看懂。

    到此这篇关于一文带你搞懂Go如何读写Excel文件的文章就介绍到这了,更多相关Go读写Excel文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号