beego通过mysql获取数据导出到excel表格

beego通过mysql获取数据导出到excel表格

      周五的时候,想给最近捣鼓到网站加一个导出数据到功能,毕竟刚开始接触Go语言,对这一块不是很熟悉,所以网上查找了相关到文章,但是发现基本都不能用,或者是导出错乱,严重怀疑是不经过验证就复制粘贴发表出去的,最后自己参考了相关知识,自己摸索写出了代码,并最终检验成功,下面跟大家分享如何通过获取mysql数据并导出到excel表格,先是mysql部分代码,大家根据自己情况写

//初始化表对象
var statisticAdmin StatisticAdmin

/**
根据条件获取用户登录记录【导出专用】
 */
func PageStatisticAdminWithExcel(searchStartDate string, searchEndDate string, 
searchAdminId int) ([]StatisticAdmin) {
   var list []StatisticAdmin
   o := orm.NewOrm()
   qs := o.QueryTable(statisticAdmin)
   //判断筛选条件
   if searchStartDate != "" {
      qs = qs.Filter("create_date__gte", searchStartDate)
   }
   if searchEndDate != "" {
      qs = qs.Filter("create_date__lte", searchEndDate)
   }
   if searchAdminId > 0 {
      qs = qs.Filter("admin_id", searchAdminId)
   }
   //查询
   qs.OrderBy("-id").All(&list)
   return list
}

      然后我们在控制器引入相关模块,获取前端传过来的值判断进行获取数据,然后我们会将数据生成保存到static/file/AdminStatisticUserLogin.xlsx文件上,最后我们直接下载该文件并命名为用户登录统计.xlsx,这样就可以实现数据保存,我们还可以通过sheet.SetColWidth(0, 2, 30.0)来设置表格的宽度,这三个参数到意思是从1第一列到第三列表格到宽度设置为30,大家可根据自己到实际情况进行设置。

import (
   "personForum/models"
   "github.com/astaxie/beego"
   "time"
   "github.com/tealeg/xlsx"
)


/**
后台-统计模块
*/
type AdminStatisticController struct {
   AdminBaseController
}

/**
统计-用户登录数据导出
 */
func (c *AdminStatisticController) AdminStatisticUserLoginExcel() {
   //获取用户搜索参数
   searchStartDate := c.GetString("searchStartDate")            //搜索-开始日期
   searchEndDate := c.GetString("searchEndDate")                //搜索-结束日期
   searchAdminId, searchAdminIdErr := c.GetInt("searchAdminId") //搜索-管理员Id
   if searchStartDate == "" {
      searchStartDate = ""
   }
   if searchEndDate == "" {
      searchEndDate = ""
   }
   if searchAdminIdErr != nil {
      searchAdminId = 0
   }
   //设置保存路径
   filePath := "static/file/AdminStatisticUserLogin.xlsx"
   //创建文件
   var file *xlsx.File
   var sheet *xlsx.Sheet
   var row *xlsx.Row
   var cell *xlsx.Cell
   file = xlsx.NewFile()
   sheet, _ = file.AddSheet("Sheet1")
   //设置表格宽度从第一列到第三列,宽度设置为30
   sheet.SetColWidth(0, 2, 30.0)
   //创建表头
   row = sheet.AddRow()
   cell = row.AddCell()
   cell.Value = "登录账户"
   cell = row.AddCell()
   cell.Value = "登录IP"
   cell = row.AddCell()
   cell.Value = "登录时间"
   //获取管理员
   adminUser := models.GetAdminUserWithAdmin()
   //获取统计数据
   result := models.PageStatisticAdminWithExcel(searchStartDate, searchEndDate, 
   searchAdminId)
   //重组统计数组
   for _, v := range result {
      //循环获取登陆用户名
      adminUserName := ""
      for _, vUser := range adminUser {
         if vUser.Id == v.AdminId {
            adminUserName = vUser.Nickname
            continue
         }
      }
      //获取时间
      CreateAt := beego.Date(time.Unix(v.CreateAt, 0), "Y-m-d H:s:i")
      //追加数据
      row = sheet.AddRow()
      sheet.SetColWidth(0, 2, 30.0)
      cell = row.AddCell()
      cell.Value = adminUserName
      cell = row.AddCell()
      cell.Value = v.Ip
      cell = row.AddCell()
      cell.Value = CreateAt
      file.Save(filePath)
   }
   // 导出表格
   c.Ctx.Output.Download(filePath, "用户登录统计.xlsx")
}

      这样我们就可以成功到根据条件获取数据并导出到excel表格,思路就是将数据生成表格保存在我们指定到目录文件中,然后我们通过下载文件到方法,将文件导出。

0条评论

发表评论