暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Beego web框架导出excel功能实战

ZFR98186 2021-08-27
763

本文用到的导出excel功能库是: Excelize,Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLSX XLSM XLTM XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。使用本类库要求使用的 Go 语言为 1.15 或更高版本。


费话不多讲,上手开练, 前端实现很简单,只要添加一个A标签,实现一个GET请求即可:

    <a class="layui-btn" href="{{urlfor "PCController.Export2Excel"}}"><i class="layui-icon"></i>导出EXCEL</a>


    具体效果如下:


    后端代码实现:

      func (p *PCController) Export2Excel() {
      uName := p.GetSession("username").(string)
      if !tools.HasPermission(uName, "view_computer") {
      p.Redirect(beego.URLFor("ErrorController.Error403"), 302)
      }
      o := orm.NewOrm()
      qs := o.QueryTable(new(models.Computer)).Filter("is_delete", 0)
      var computers []models.Computer
      _, _ = qs.RelatedSel().All(&computers)


      titles := []string{
      "位置", "主机名", "设备类型", "品牌", "型号", "当前使用者", "资产分组", "资产编号", "购买时间", "序列号", "快速服务代码",
      "质保时间", "逻辑删除1删除0未删除", "1启用0停用", "1报废0正常", "1仓库中0仓库外", "IP地址", "备注", "主机cpu", "主机内存",
      "主机磁盘", "操作系统",
      }
      cells := []string{
      "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U",
      "V",
      }
      // 新建工作簿
      f := excelize.NewFile()
      index := f.NewSheet("Sheet1")


      // 列标题赋值
      for i, v := range titles {
      _ = f.SetCellValue("Sheet1", cells[i]+"1", v)
      }


      var computerList [][]string


      for _, element := range computers {
      tmpArr := []string{element.Location, element.Name, element.DeviceTypes.DeviceType, element.Brands.Name,
      element.Model, element.UserName, element.Groups.GroupName, element.AssetNo, element.PurchaseDate,
      element.SN, element.QuickServiceCode, element.Warranty, strconv.Itoa(element.IsDelete),
      strconv.Itoa(element.IsActive), strconv.Itoa(element.IsBreakdown), strconv.Itoa(element.InRepository),
      element.IpAddress, element.Remark, element.Cpu, element.Memory, element.Disk, element.OS,
      }
      computerList = append(computerList, tmpArr)
      }


      for i, v := range computerList {
      // i 行数
      // v 行内容
      columnNum := 0 // 列数
      for _, e := range v {
      pos := cells[columnNum] + strconv.Itoa(i+2)
      fmt.Println(pos)
      fmt.Println(e)
      _ = f.SetCellValue("Sheet1", pos, e)
      columnNum++
      }
      }


      f.SetActiveSheet(index)
      f.Path = "static/excels/computers.xlsx"
      if err := f.Save(); err != nil {
      fmt.Println(err)
      }
      p.Ctx.Output.Download(f.Path, "computers.xlsx")
      }

      导出的Excel内容如下:


      文章转载自ZFR98186,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论