go使用excelize导出excel

 由于xlsx库两年没有更新了,所以今天又写了个使用excelize到处excel

传参格式仍可参照用xlsx格式:

go语言使用tealeg/xlsx导出excel_借我三行代码的博客-CSDN博客

type UserData struct {
	Name   string
	Age    int
	Gender string
}

func downRolesHandler(ctx *gin.Context) {
	// 数据
	data := []UserData{
		{"张三", 18, "男"},
		{"李四", 20, "女"},
		{"王五", 22, "男"},
	}

	//var res []interface{}
	//for _, trip := range data {
	//	res = append(res, trip)
	//}
	content := ToExcel([]string{"姓名", "年龄", "性别"}, data)
	ResponseXls(ctx, content, "123")
}

func ToExcel(titleList []string, dataList []UserData) (content io.ReadSeeker) {
	// 生成一个新的文件
	file := excelize.NewFile()
	// 添加sheet页
	sheet, _ := file.NewSheet("Sheet1")
	file.SetActiveSheet(sheet)
	// 插入表头
	for i, v := range titleList {
		cellName, _ := excelize.CoordinatesToCellName(i+1, 1)
		file.SetCellValue("Sheet1", cellName, v)
	}

	// 插入内容
	for i, v := range dataList {
		row := i + 2 //从第二行开始插入数据
		//cellName, _ := excelize.CoordinatesToCellName(i+1, 2)
		//file.SetCellValue("sheet1", cellName, v)
		cells := []interface{}{v.Name, v.Age, v.Gender}
		if err := file.SetSheetRow("Sheet1", fmt.Sprintf("A%d", row), &cells); err != nil {
			panic(err)
		}
	}

	var buffer bytes.Buffer
	_ = file.Write(&buffer)
	content = bytes.NewReader(buffer.Bytes())
	return
}

// 向前端返回Excel文件
// 参数 content 为上面生成的io.ReadSeeker, fileTag 为返回前端的文件名
func ResponseXls(c *gin.Context, content io.ReadSeeker, fileTag string) {
	fileName := fmt.Sprintf("%s%s%s.xlsx", xtime.Now(), `-`, fileTag)
	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, xtime.Now().Time(), content)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值