首页 > 其他分享 >一文搞懂Go读写Excel文件(下)

一文搞懂Go读写Excel文件(下)

时间:2022-11-04 22:04:56浏览次数:49  
标签:rows http file err nil Excel func Go 搞懂

2.4 使用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 http.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.Reader {
      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压缩文件,很难看懂。

今天的分享就到这里~

标签:rows,http,file,err,nil,Excel,func,Go,搞懂
From: https://blog.51cto.com/u_15654567/5824832

相关文章

  • excel导出功能的实现流程说⼀下?
    导出的话,我们因为到处的数据量不⼤,所以直接采取的时候前端主导的⽅案,参考的现成⽅案实现的导出⼤概得流程就是1.调⽤后端接⼝得到要导出的数据2.把数据简单处理⼀下......
  • Google protoBuf
    前言:最近app要做用户行为统计埋点,对数据进行序列化和反序列化实用Google提供的protoBuf,这里也简单的介绍一下protobuf已经更新到3.2.0:查看blog下面资源包依赖:Win7+64位,and......
  • GO(1)开发环境
    前言后边准备学习云安全以及区块链安全,先看一遍GO语言开发环境Go官网下载地址:https://golang.org/dl/配置GOPATHGOPATH是一个环境变量,用来表明你写的go项目的存放路......
  • 如何在proto3中用上golang对应的interface{}类型
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯首先,我希望所有golang中用于http请求响应的结构,都使用proto......
  • gorm
    特性全功能ORM关联(HasOne,HasMany,BelongsTo,ManyToMany,多态,单表继承)Create,Save,Update,Delete,Find中钩子方法支持Preload、Joins的预加载事务,嵌套事务,SaveP......
  • 大文件上传(秒传/断点续传)_使用Vue-Simple-Uploader插件 --Vue/Django完整实现
    Vue-Simple-Uploader插件-Github地址:​​https://github.com/simple-uploader/vue-uploader/blob/master/README_zh-CN.md​​​simple-uploader-详细参数-Github地......
  • Vue项目或Django项目在Linux系统持续运行 - XShell
    Vue项目$nohupnpmrunserve&exitDjango项目$nohuppythonmanage.pyrunserver0.0.0.0:8000>nohup.out&exit稍微解释一下命令:nohup:不挂断的运行命令>nohup.out:......
  • .Net Core 3.0 对 MongoDB 的多条件(两种)查询操作
    前言  在日常开发中,偶尔会用到MongoDB的数据操作,也花费了一些时间调试,因此在此处记录一下,共同进步。废话少说,出招吧!正文2.1准备工作首先需要引入.Net平台链接......
  • 文件上传 前后端完整流程 - Vue+Django开发
    一.创建Django项目查看是否安装Django:`django-admin--version’#创建项目django-adminstartprojectmysite#创建应用pymanage.pystartappfileUpload#运行项目py......
  • Springboot 整合mongodb 操作工具类仿mybatis-plus风格
    https://blog.csdn.net/weixin_40986713/article/details/124192456优化点 有时间可以慢慢全部优化成mybatis-plus风格privateQueryeqQuery(Map<String,Object>dat......