Go项目导出Excel文件

go项目中,有很多操作Excel的库,我使用的是github.com/xuri/excelize/v2,这个库的官方教程介绍 · Excelize 简体字文档 (xuri.me)

下面我介绍我用到的一些方法

f:excelize.NewFile()  //新建一个文件
f.SetCellValue("Sheet1", "A1", "姓名") //写入属性
//为表格设置一些样式
styleID, err := f.NewStyle(&excelize.Style{
	Alignment: &excelize.Alignment{
		Horizontal: "center",
	},
	Font: &excelize.Font{
		Family: "宋体",
		Size:   10,
	},
})

将文件格式和数据编辑好后,下面就要将数据返回给前端,

	// 将 Excel 文件保存到临时文件中
	tempFile, err := os.CreateTemp("", "excel_*.xlsx")
	if err != nil {
		return nil, err
	}
	defer os.Remove(tempFile.Name())
	defer tempFile.Close()

	if err := f.Write(tempFile); err != nil {
		return nil, err
	}
	// 设置 HTTP 响应头
	w.Header().Set("Content-Disposition", "attachment; filename=xxx.xlsx")
	w.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
	err = f.Write(w)
	if err != nil {
		return nil, err
	}

我们可以将导出Excel的方法抽离出来,我们用的是Gin框架,那末在Controller层,我们可以将c.Writer响应体传入导出Excel的方法中

// ExportHandler 
func ExportHandler(c *gin.Context) {
	f, err := utils.ExportExcel(c.Writer, data) 
	if err != nil {
		global.GVA_LOG.Error("导出失败", zap.Error(err))
		response.FailWithMessage("导出失败", c)
		return
	}
	response.OkWithData(f, c)
}

那末在导出Excel的方法里,我们这样设置

func ExportExcel(w http.ResponseWriter, datas []response.ExamPeople) (*excelize.File, error) {
    f := excelize.NewFile()
	// 将 Excel 文件保存到临时文件中
	tempFile, err := os.CreateTemp("", "excel_*.xlsx")
	if err != nil {
		return nil, err
	}
	defer os.Remove(tempFile.Name())
	defer tempFile.Close()

	if err := f.Write(tempFile); err != nil {
		return nil, err
	}
	// 设置 HTTP 响应头
	w.Header().Set("Content-Disposition", "attachment; filename=xxx.xlsx")
	w.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
	err = f.Write(w)
	if err != nil {
		return nil, err
	}

	return f, err
}

然后前端请求这个方法的时候会自动下载Excel的文件。这样导出Excel文件就实现了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值