【Golang】使用gin框架导出excel和csv文件

目录

1、背景

项目中可能会遇到导入导出一批数据的功能,对于批量大数据可能用表格的方式直观性更好,所以本篇文件来讲一下go中导出excel和csv文件的方式。

2、go库

【1】excel库下载

go get -u github.com/xuri/excelize/v2

【2】csv标准库

encoding/csv

3、代码示例

go 复制代码
func main() {
	r := gin.Default()

	r.GET("/download", func(c *gin.Context) {
		fileType := c.Query("type") // 获取请求参数csv或excel

		switch strings.ToLower(fileType) {
		case "csv":
			downloadCSV(c)
		case "excel":
			downloadExcel(c)
		default:
			c.JSON(http.StatusBadRequest, gin.H{"error": "invalid type parameter, use 'csv' or 'excel'"})
		}
	})

	r.Run(":8080")
}

func downloadCSV(c *gin.Context) {
	// 设置响应头 - 解决乱码和中文文件名问题
	filename := url.QueryEscape("测试.csv")
	c.Header("Content-Disposition", "attachment; filename*=UTF-8''"+filename)
	c.Header("Content-Type", "text/csv; charset=utf-8")

	// 写入UTF-8 BOM头,防止中文乱码(可选,某些旧版Excel需要)
	_, _ = c.Writer.Write([]byte{0xEF, 0xBB, 0xBF})

	// 创建CSV写入器
	writer := csv.NewWriter(c.Writer)
	defer writer.Flush()

	// 写入表头
	_ = writer.Write([]string{"姓名", "年龄"})

	// 写入数据行
	data := [][]string{
		{"xxx", "18"},
		{"yyy", "19"},
		{"zzz", "20"},
	}

	for _, row := range data {
		_ = writer.Write(row)
	}
}

func downloadExcel(c *gin.Context) {
	// 创建Excel文件
	f := excelize.NewFile()
	defer f.Close()

	// 创建工作表
	index, _ := f.NewSheet("Sheet1")

	// 设置表头
	_ = f.SetCellValue("Sheet1", "A1", "姓名")
	_ = f.SetCellValue("Sheet1", "B1", "年龄")

	// 设置数据
	data := [][]interface{}{
		{"xxx", "18"},
		{"yyy", "19"},
		{"zzz", "20"},
	}

	for i, row := range data {
		_ = f.SetCellValue("Sheet1", "A"+strconv.Itoa(i+2), row[0])
		_ = f.SetCellValue("Sheet1", "B"+strconv.Itoa(i+2), row[1])
	}

	// 设置活动工作表
	f.SetActiveSheet(index)

	// 设置响应头 - 解决中文文件名问题
	filename := url.QueryEscape("测试.xlsx")
	c.Header("Content-Type", "application/octet-stream")
	c.Header("Content-Disposition", "attachment; filename*=UTF-8''"+filename)

	// 写入响应
	_ = f.Write(c.Writer)
}

4、使用方法

浏览器上输入http://127.0.0.1:8080/download?type=excel 下载excel文件,浏览器上输入**http://127.0.0.1:8080/download?type=csv**下载csv文件,下载完之后可以在下载目录看到如下文件:

bash 复制代码
xxx@A030414-NC MINGW64 /d/谷歌浏览器下载文件
$ ls 测试.*
测试.csv  测试.xlsx
相关推荐
未来之窗软件服务5 小时前
Go 利器 GoReSym:剥离符号恢复 Go 二进制元数据—东方仙盟
开发语言·golang·仙盟创梦ide·东方仙盟
念何架构之路8 小时前
zap WriteSyncer与Sink体系
云原生·golang
泡海椒10 小时前
JQuick-Excel dateFormat 转换实战:日期值与 FORMAT 显示格式的边界
开发语言·python·excel
microrain10 小时前
权限改了,接口立刻生效,菜单要等重新登录:SagooIoT 权限体系的四道闸门
物联网·golang·开源·sagooiot
2501_9336707912 小时前
2027风控策略岗秋招准备:SQL、Excel、建模的优先级与项目路径
人工智能·sql·excel
流形填表13 小时前
在线考试平台导入题库:Excel格式与字段对照
excel
开开心心就好1 天前
办公软件卸载不干净?专用工具一键清残留
java·前端·人工智能·智能手机·kafka·excel·memcache
大侠归来1 天前
C 与 Go 语言对比:从设计哲学到工程实践
java·c语言·golang
全速向光1 天前
Excel函数系列09:公式又长又乱?LET+LAMBDA+MAP+REDUCE,自定义函数一次讲透
excel
鲲穹AI种草1 天前
办公表格批量处理:多款 Excel 工具能力客观记录
excel