【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
相关推荐
TracyDemo17 小时前
excel 透视图怎么进行删除透视图
excel
骆驼爱记录18 小时前
Excel邮件合并嵌入图片技巧
自动化·word·excel·wps·新人首发
zhangfeng113319 小时前
Ollama 支持模型微调但是不支持词库,支持RAG,go语言开发的大模型的推理应用,
人工智能·深度学习·golang
avi911119 小时前
Unity Data Excel读取方法+踩坑记;和WPS Excel的一些命令
unity·游戏引擎·excel·wps·data
梦幻通灵20 小时前
Excel多个sheet合并透视表实现方案【持续更新】
excel
开开心心就好21 小时前
键盘映射工具改键位,绿色版设置后重启生效
网络·windows·tcp/ip·pdf·计算机外设·电脑·excel
恬淡如雪21 小时前
Excel接口测试自动化实战
爬虫·python·excel
Dr.Kun21 小时前
【鲲码园PsychoPy】Go/No-go范式
开发语言·后端·golang
速易达网络1 天前
linux命令大全
linux·运维·excel
Leisure -_-1 天前
新建时没有excel选项,如何添加?
excel