【Golang】实现 Excel 文件下载功能

在当今的网络应用开发中,提供数据导出功能是一项常见的需求。Excel 作为一种广泛使用的电子表格格式,通常是数据导出的首选格式之一。在本教程中,我们将学习如何使用 Go 语言和 Gin Web 框架来创建一个 Excel 文件,并允许用户通过 HTTP 请求下载该文件。

准备工作

在开始之前,请确保您的开发环境中已经安装了 Go 语言和相关的开发工具。此外,您还需要安装 Gin Web 框架和 excelize 包,这两个包都将用于我们的示例中。

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

创建 Excel 文件

首先,我们将创建一个名为 “Sheet1” 的工作表,并向其中写入一些数据。这可以通过使用 excelize 包来实现。以下是一个简单的示例,展示了如何创建一个 Excel 文件并向其中写入数据。

package main
import (
	"fmt"
	"net/http"
	"time"
	"github.com/gin-gonic/gin"
	"github.com/xuri/excelize/v2"
)
func main() {
	r := gin.Default()
	r.GET("/export", func(c *gin.Context) {
		file := excelize.NewFile()
		sheetName := "Sheet1"
		// 向工作表中写入数据
		for row := 1; row <= 10; row++ {
			for col := 1; col <= 5; col++ {
				cell, err := excelize.CoordinatesToCellName(col, row)
				if err != nil {
					c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to get cell name"})
					return
				}
				if err := file.SetCellValue(sheetName, cell, fmt.Sprintf("Row %d, Col %d", row, col)); err != nil {
					c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to set cell value"})
					return
				}
			}
		}
		// 设置 HTTP 响应的头信息
		c.Header("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
		filename := fmt.Sprintf("Report_%v.xlsx", time.Now().Format("2006-01-02T15:04:05"))
		c.Header("Content-Disposition", "attachment; filename="+filename)
		// 将 Excel 文件写入 HTTP 响应
		if err := file.Write(c.Writer); err != nil {
			c.JSON(http.StatusOK, "failed")
			return
		}
		c.JSON(http.StatusOK, "success")
	})
	r.Run(":8080")
}

在上面的代码中,我们首先创建了一个新的 Excel 文件,并设置了工作表的名称为 “Sheet1”。然后,我们使用嵌套的 for 循环向工作表中写入数据。每个单元格的值都是 “Row x, Col y” 的格式,其中 x 和 y 分别是当前行和列的编号。
接下来,我们设置了 HTTP 响应的 “Content-Type” 头,将其设置为 “application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”,这将告诉浏览器响应是一个 Excel 文件。我们还设置了 “Content-Disposition” 头,将文件名设置为 “Report_当前时间.xlsx” 的格式。
最后,我们使用 excelize 包的 Write() 方法将 Excel 文件写入 HTTP 响应的主体中。如果写入成功,我们返回 “success”,否则返回 “failed”。

启动服务器

现在,我们已经创建了一个简单的 Web 服务器,该服务器提供了一个名为 “/export” 的路由。当用户访问这个路由时,服务器将创建一个 Excel 文件并将其作为 HTTP 响应发送给用户,允许用户下载该文件。
要启动服务器,请运行以下命令:

go run main.go

服务器将开始在本地端口 8080 上监听请求。

测试下载功能

要测试下载功能,请在浏览器中访问以下 URL:

http://localhost:8080/export

您应该会看到一个文件下载提示,允许您下载名为 “Report_当前时间.xlsx” 的 Excel 文件。

总结

在本教程中,我们学习了如何使用 Go 语言和 Gin Web 框架来创建一个 Excel 文件,并允许用户通过 HTTP 请求下载该文件。我们使用了 excelize 包来创建和写入 Excel 文件,并使用 Gin 来处理 HTTP 请求和响应。这个示例可以作为一个基础模板,用于在实际项目中实现更复杂的数据导出功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/603345.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年美国市场亚太游戏品牌数字广告洞察报告

来源&#xff1a;Sensor Tower 美国是全球最大的游戏市场之一&#xff0c;也是亚太游戏品牌出海的重要市场。2023年Q2至2024年Q1&#xff0c;美国市​场广告投放额排名前10的亚太游戏品牌&#xff0c;合计支出 超过7.5亿美元&#xff0c;环比上涨23%。 排名第一的米哈游(miHoY…

DES加密解密算法(简单、易懂、超级详细)

目录 一、基础补充 二、什么是DES算法 &#xff08;1&#xff09;对称加密算法 &#xff08;2&#xff09;非对称加密算法 &#xff08;3&#xff09;对称加密算法的应用 三、DES算法的基础操作步骤 1.明文的加密整体过程 2.F轮函数解析 3.密钥的形成过程 四、AC代码 五、D…

电脑怎么压缩视频?win端、Mac端压缩工具分享~

我们经常需要处理和分享视频文件。然而&#xff0c;视频文件往往会占用大量的存储空间&#xff0c;特别是高分辨率和高质量的视频。为了方便存储和分享&#xff0c;我们常常需要将视频文件进行压缩。本文将介绍如何使用电脑系统win端或Mac端自带的视频编辑器、以及常用的剪辑软…

Golang——IO操作

1. 输入输出的底层原理 终端其实是一个文件(Linux下一切皆文件)&#xff0c;相关实例如下&#xff1a; os.Stdin&#xff1a;标准输出的文件实例&#xff0c;类型为*Fileos.Stdout&#xff1a;标准输入的文件实例&#xff0c;类型为*Fileos.Stderr&#xff1a;标准错误输出的文…

元器件的检测及万用表的使用

实验目的&#xff1a; 1. 了解万用表的结构和原理&#xff1b; 2. 识别常用电子元器件&#xff0c;学习使用万用表测量电阻、电感、电容和二极管的方法&#xff1b; 3. 学习使用万用表测量直流电压和直流电流的方法&#xff1b; 4. 理解万用表内阻对测量结果的影响&#xf…

pythonnet调用dll提示DragDrop注册失败

问题描述 解决方案 在引入clr之前&#xff0c;引入pythoncom&#xff0c;并做初始化 # 注意这段代码必须在import clr之前否则无效 import pythoncom pythoncom.CoInitialize() import clr

【文献解析】3D高斯抛雪球是个什么玩意

论文地址&#xff1a;https://arxiv.org/abs/2308.04079 项目&#xff1a;3D Gaussian Splatting for Real-Time Radiance Field Rendering 代码&#xff1a;git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive 一、文章概述 1.1问题导向 辐射…

【学习笔记】HarmonyOS 4.0 鸿蒙Next 应用开发--安装开发环境

开发前的准备 首先先到官网去下载Devco Studio 这个开发工具&#xff0c;https://developer.harmonyos.com/cn/develop/deveco-studio/#download 提供了WIndows和Mac的开发环境&#xff0c;我自己是Windows的开发环境。 所以下载之后直接点击exe进行安装即可。 如果之前安装过…

时间如此珍贵,好的规划是成功的开始!防止时间流失!

时间如同沙子&#xff0c;无论你怎样去抓捏&#xff0c;都无法将其追回。对于我们每个人来说&#xff0c;时间都是一种宝贵的资源&#xff0c;我们需要合理利用它来实现我们的目标和梦想。然而&#xff0c;如果我们没有一个明确的计划&#xff0c;我们的行动将会变得毫无目的和…

使用单片机在图形点阵LCD上绘制波形图

使用单片机在图形点阵LCD上绘制波形图 需求&#xff1a; 假如有一组浮点数据&#xff0c;是通过AD转换得到的&#xff0c;保存在数组MyArray[]中&#xff0c;采集点数为len&#xff0c;采集周期为T&#xff0c;现在想用单片机在LCD上绘制出这组数据对应的波形图&#xff0c;该…

在做题中学习(50):搜索插入位置

35. 搜索插入位置 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;二分查找 思路&#xff1a;题目是有序的&#xff0c;时间复杂度O(logN),二分没跑了&#xff0c;题目说如果找不到target&#xff0c;返回它应该被插入位置的下标&#xff0c;所以可以分析一下示例2&…

电子书3D翻页制作技巧大揭秘,轻松将文档转化为逼真仿真书!

随着数字化时代的到来&#xff0c;电子书已成为阅读的主流形式之一。然而&#xff0c;普通的电子书往往缺乏纸质书的质感和互动性&#xff0c;让人感到有些遗憾。今天&#xff0c;将为你揭秘电子书3D翻页制作技巧&#xff0c;让你轻松将文档转化为逼真仿真书&#xff01; 1.要制…

中国热门高端dating约会交友软件有哪些?国内权威Dating App红黑排行榜推荐

在dating 软件刷了无数个男人后终于脱单啦&#xff0c;跟大家分享一些我的个人感受 1、二狗 颜值⭐️⭐️⭐️ 真实性 ⭐️⭐️⭐️⭐️⭐️ 用户质量⭐️⭐️⭐️⭐️ ⭕️优点&#xff1a;整体用户质量较高&#xff0c;用户集中在金融、互联网和体制内行业。用户需进行学历、…

Oopsie从80端口到获取root权限的渗透过程

Oopsie 需要用到的工具burpnmapnc手写代码信息收集 由于是靶场的原因单一没有子站所以收集到ip就可以nmap扫描 拿到IP第一件事就是扫描端口 nmap -T4 -sV -sC -sS 10.129.24.79 -T4:提升扫描速度 -sV&#xff1a;查看详细版本 -sC:使用默认类别的脚本进行扫描 可更换其他类别…

ADC模-数转换原理与实现

1. 今日摸鱼计划 今天来学习一下ADC的原理&#xff0c;然后把ADC给实现 ADC芯片:ADC128S102 视频&#xff1a; 18A_基于SPI接口的ADC芯片功能和接口时序介绍_哔哩哔哩_bilibili 18B_使用线性序列机思路分析SPI接口的ADC芯片接口时序_哔哩哔哩_bilibili 18C_基于线性序列机的S…

“情况不明,对子先行”攻略

掼蛋作为一种策略性极强的游戏&#xff0c;不仅考验牌技&#xff0c;更考验玩家的智慧和策略布局。这里主要介绍一下当牌力不足的时候的普通策略—情况不明&#xff0c;对子先行。 当你的牌力不强&#xff0c;或者牌局情况不明朗时&#xff0c;自己手上有有比较多的对子&#x…

【前端】前端数据本地化的多种实现方式及其优劣对比

前端数据本地化的多种实现方式及其优劣对比 在现代Web开发中&#xff0c;提高页面响应速度和改善用户体验是核心目标之一。数据本地化是其中一种实现方式&#xff0c;它通过在客户端存储数据来减少服务器请求&#xff0c;从而加快数据载入速度和改善用户的体验。本文将介绍前端…

面试大全资料分享-工作无忧

找工作啦 面试大全资料分享 关注公众号 回复 面试大全 即可获取下载链接.

Chromium编译指南2024 Windows11篇-GN 工具生成构建文件(六)

前言 在《Chromium编译指南2024&#xff08;五&#xff09;》我们已经获取了 Chromium 的源代码并且同步了相关的第三方依赖。 现在&#xff0c;我们将进一步学习如何使用 GN 工具生成构建文件&#xff0c;为后续的编译工作做好准备。 1. 使用gn工具生成构建文件 再次在Win…

C#里如何设置输出路径,不要net7.0-windows

官网介绍&#xff1a; 更改生成输出目录 - Visual Studio (Windows) | Microsoft Learn <PropertyGroup> <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath> <AppendRuntimeIdentifierToOutputPath>false</Appen…
最新文章