【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 小时前
Python如何将律师的Excel噩梦变成自动化系统
python·自动化·excel
北漂燕郊杨哥6 小时前
DotMD:一款基于 Go + Wails 的轻量开源 Markdown 桌面编辑器
golang·开源·编辑器·markdown·md
运维开发笔记6 小时前
5.1 Go 数组学习笔记
golang
用户298698530146 小时前
将 Excel 表格转换为图片的三种实用方法
人工智能·后端·excel
AI英德西牛仔7 小时前
秘塔 导出word指令之外:AI导出鸭电脑版的底层逻辑与批量交付哲学
人工智能·word·excel·deepseek·ai导出鸭
AI英德西牛仔8 小时前
让 AI 导出回归优雅:纳米AI excel 与“AI 导出鸭”的 PC 端批量导出技术拆解
人工智能·excel·deepseek·ai导出鸭
AI导出鸭8 小时前
怎么让腾讯元宝做表格?AI导出鸭苹果版通过解析引擎将元宝表格HTML转为结构化数据,一键导出标准Excel或Word
人工智能·chatgpt·html·excel·ai导出鸭
互联网中的一颗神经元1 天前
06. Small 对象分配:mcache 无锁路径
开发语言·golang
abcefg_h1 天前
MCP 实战指南:如何在项目中使用 Model Context Protocol 及其通信原理
开发语言·后端·golang·mcp
ylj_dev1 天前
从 0 构建 AI Workload Platform(四):从单机工作流内核到可靠控制面
docker·postgresql·架构·golang