GoLang+gin框架导出Excel
安装
go get github.com/xuri/excelize/v2
控制器
func (e Users) UserExport(c *gin.Context) {
srv := service.Users{}
req := dto.SysUserPageList{}
records := make([]model.SysUser, 0)
content := srv.UserExport(&req, &records)
fileName := fmt.Sprintf("%s%s%s.xlsx", time.Now().Format("2016-01-02"), `-`, "user")
c.Writer.Header().Add("Content-Disposition", fmt.Sprintf(`attachment; filename="%s"`, fileName))
c.Writer.Header().Add("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
http.ServeContent(c.Writer, c.Request, fileName, time.Now(), content)
}
服务层
import
_ "image/gif"
_ "image/jpeg"
_ "image/png"
func (e *Users) UserExport(c *dto.SysUserPageList, records *[]model.SysUser) (reader *bytes.Reader) {
err := e.Orm.Table(model.SysUser{}.TableName()).Find(records).Error
if err != nil {
return reader
}
return e.download(*records)
}
func (e *Users) download(records []model.SysUser) *bytes.Reader {
f := excelize.NewFile() // 设置单元格的值
// 这里设置表头
f.SetCellValue("Sheet1", "A1", "用户账号")
f.SetCellValue("Sheet1", "B1", "用户姓名")
f.SetCellValue("Sheet1", "C1", "头像")
f.SetCellValue("Sheet1", "D1", "性别")
f.SetCellValue("Sheet1", "E1", "手机号")
f.SetCellValue("Sheet1", "F1", "部门")
f.SetCellValue("Sheet1", "G1", "状态")
line := 1
// 循环写入数据
for _, v := range records {
line++
f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), v.Username)
f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.Realname)
f.AddPicture("Sheet1", fmt.Sprintf("C%d", line), "static/uploads/images/2022/09/8a1a001e-62e1-4968-84ef-ec6068201c68.jpg", "")
//f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.Avatar)
f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.Sex)
f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), v.Phone)
f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), v.DepartIds)
f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.Status)
}
var buffer bytes.Buffer
_ = f.Write(&buffer)
content := bytes.NewReader(buffer.Bytes())
return content
//// 保存文件
//if err := f.SaveAs("userList.xlsx"); err != nil {
// return err
//}
return nil
}

