当前位置: 首页 > news >正文

【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 请求和响应。这个示例可以作为一个基础模板,用于在实际项目中实现更复杂的数据导出功能。

相关文章:

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

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

设计模式2——原则篇:依赖倒转原则、单一职责原则、合成|聚合复用原则、开放-封闭原则、迪米特法则、里氏代换原则

设计模式2——设计原则篇 目录 一、依赖倒转原则 二、单一职责原则&#xff08;SRP&#xff09; 三、合成|聚合复用原则&#xff08;CARP&#xff09; 四、开放-封闭原则 五、迪米特法则&#xff08;LoD&#xff09; 六、里氏代换原则 七、接口隔离原则 八、总结 一、依赖…...

深入探讨布隆过滤器算法:高效的数据查找与去重工具

在处理海量数据时&#xff0c;我们经常需要快速地进行数据查找和去重操作。然而&#xff0c;传统的数据结构可能无法满足这些需求&#xff0c;特别是在数据量巨大的情况下。在这种情况下&#xff0c;布隆过滤器&#xff08;Bloom Filter&#xff09;算法就显得尤为重要和有效。…...

基于STC12C5A60S2系列1T 8051单片机实现一主单片机与一从单片机进行双向串口通信功能

基于STC12C5A60S2系列1T 8051单片机实现一主单片机与一从单片机进行双向串口通信功能 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机串口通信介绍STC12C5A60S2系列1T 8051单片机串口通信的结构基于STC12C5A60S2系列1T 8051单片机串口通信的特殊功能寄存器…...

ubuntu18.04安装docker容器

Ubuntu镜像下载 https://mirrors.huaweicloud.com/ubuntu-releases/ docker安装 # 第一步、卸载旧版本docker sudo apt-get remove docker docker-engine docker.io containerd runc# 第二步、更新及安装软件 luhost:~$ curl -fsSL https://get.docker.com -o get-docker.sh …...

202212青少年软件编程(Python)等级考试试卷(二级)

第 1 题 【单选题】 运行下列程序, 最终输出的结果是? ( ) info = {1:小明, 2:小黄,3:小兰}info[4] = 小红info[...

单播、组播、广播

​​​​​​ 概念 单播&#xff08;Unicast&#xff09; 单播是网络中最常用、最基本的通信方式。在单播通信中&#xff0c;数据包从一个节点发送到特定的另一个节点。换句话说&#xff0c;发送端和接收端之间建立一对一的连接&#xff0c;然后进行数据传输。 例如&#x…...

吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.13-1.14

目录 第二门课: 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第一周&#xff1a;深度学习的 实践层面 (Practical aspects of Deep Learning)1.13 梯度检验&#…...

笔试强训未触及题目(个人向)

1.DP22 最长回文子序列 1.题目 2.解析 这是一个区间dp问题&#xff0c;我们让dp[i][j]表示在区间[i&#xff0c;j]内的最长子序列长度&#xff0c;如图&#xff1a; 3.代码 public class LongestArr {//DP22 最长回文子序列public static void main(String[] args) {Scanner…...

【YOLO改进】换遍MMDET主干网络之EfficientNet(基于MMYOLO)

EfficientNet EfficientNet是Google在2019年提出的一种新型卷积神经网络架构&#xff0c;其设计初衷是在保证模型性能的同时&#xff0c;尽可能地降低模型的复杂性和计算需求。EfficientNet的核心思想是通过均衡地调整网络的深度&#xff08;层数&#xff09;、宽度&#xff0…...

uniapp下拉选择组件

uniapp下拉选择组件 背景实现思路代码实现配置项使用尾巴 背景 最近遇到一个这样的需求&#xff0c;在输入框中输入关键字&#xff0c;通过接口查询到结果之后&#xff0c;以下拉框列表形式展现供用户选择。查询了下uni-app官网和项目中使用的uv-ui库&#xff0c;没找到符合条…...

高斯数据库创建函数的语法

CREATE FUNCTION 语法格式 •兼容PostgreSQL风格的创建自定义函数语法。 CREATE [ OR REPLACE ] FUNCTION function_name ( [ { argname [ argmode ] argtype [ { DEFAULT | : | } expression ]} [, …] ] ) [ RETURNS rettype [ DETERMINISTIC ] | RETURNS TABLE ( { column_…...

【.NET Core】你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟

你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟 文章目录 你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟一、概述二、CallerMemberNameAttribute类三、CallerFilePathAttribute 类四、CallerLineNumberAttribute 类…...

ubuntu删除opencv

要完全删除OpenCV 3.4.5版本&#xff0c;你可以按照以下步骤进行操作&#xff1a; 卸载OpenCV库&#xff1a; 首先&#xff0c;你需要卸载OpenCV 3.4.5版本。可以使用以下命令卸载OpenCV库&#xff1a; sudo apt-get purge libopencv*这将删除OpenCV库及其相关文件。 删除O…...

K8s源码分析(二)-K8s调度队列介绍

本文首发在个人博客上&#xff0c;欢迎来踩&#xff01; 本次分析参考的K8s版本是 文章目录 调度队列简介调度队列源代码分析队列初始化QueuedPodInfo元素介绍ActiveQ源代码介绍UnschedulableQ源代码介绍**BackoffQ**源代码介绍队列弹出待调度的Pod队列增加新的待调度的Podpod调…...

OpenGL ES 面试高频知识点(二)

说说纹理常用的采样方式? 最邻近点采样(GL_NEAREST)和双线性采样(GL_LINEAR)。 GL_NEAREST 采样是 OpenGL 默认的纹理采样方式,OpenGL 会选择中心点最接近纹理坐标的那个像素,纹理放大的时候会有锯齿感或者颗粒感。 **GL_LINEAR 采样会基于纹理坐标附近的纹理像素,计…...

2024第十六届“中国电机工程学会杯”数学建模A题B题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…...

面向对象的三大特性:封装、继承、多态

一、封装 封装是面向对象的核心思想。是以类为载体&#xff0c;将对象的属性和行为封装起来&#xff0c;对外隐藏其实现细节。 封装保证了类内部数据结构的完整性&#xff0c;使得外部&#xff08;使用该类的用户&#xff09;不能轻易地直接操作此数据结构&#xff0c;只能执…...

目标检测YOLO实战应用案例100讲-基于深度学习的交通场景多尺度目标检测算法研究与应用(中)

目录 3.4 实验结果与分析 深度融合注意力跨尺度复合空洞残差交通目标检测算法...

前端GET请求下载后端返回数据流文件,并且处理window.open方法跳转白屏方法

平时常用导出都是用window.open方法 点击跳转连接&#xff1a;使用 window.open 下载 const downError 地址?&参数${参数|| }; const downError Url/xxx/xxx?&orgId${orgId || };window.open(downError, "_self");//调用window.open方法导出 而使用…...

为什么 HDFS 文件一旦写入就不能修改,只能追加或删除(HDFS 设计哲学:一次写入,多次读取)

HDFS采用"一次写入&#xff0c;多次读取"的设计哲学&#xff0c;不支持文件内容修改。这种设计通过简化数据一致性机制、提高吞吐量和优化批处理场景性能&#xff0c;实现了高效的大数据处理。虽然不能直接修改文件&#xff0c;但支持追加、删除和覆盖操作。Hive等工…...

大模型应用

RAG 入门项目&#xff1a;项目简介&#xff1a;RAG&#xff08;检索增强生成&#xff09;核心分为离线处理与在线处理两条主线&#xff1a;离线处理&#xff1a;持续向私有向量知识库补充私有知识文档&#xff0c;可纳入模型训练截止后的最新资料&#xff0c;为模型提供参考依据…...

制造业数据架构设计顶层规划方案:数据资源规划、基础数据管理、数据分析应用、数据治理体系 、实施路线图

该方案针对企业数据架构空白、缺乏统一模型与治理体系的问题&#xff0c;提出了以数据资源规划、主数据与元数据管理、数据分析应用及数据治理为核心的整体架构。通过明确数据分布与流向、构建企业级数据仓库与治理平台&#xff0c;最终实现数据驱动决策与业务规范化&#xff0…...

IOT-Tree支持[子站-中心]数据同步功能-轻松支持你的物联网平台

在版本1.9.0开始&#xff0c;IOT-Tree内部移植并开源了中心-子站点的数据同步功能&#xff0c;这个功能已经在我们开发团队的企业用户系统中使用了很长一段时间&#xff0c;足够稳定和可靠。 当前很多物联网系统中&#xff0c;经常有如下需求&#xff1a; 1&#xff09;一些工…...

JS 异步 从零讲(大白话 + 真实场景 + 可运行案例)

按顺序&#xff1a;回调函数 → Promise → async/await&#xff0c;工作最常用&#xff0c;直接上手。1. 回调函数&#xff08;最原始&#xff0c;缺点&#xff1a;回调地狱&#xff09;2. Promise&#xff08;解决回调地狱&#xff0c;链式调用&#xff09;new Promise((reso…...

为什么四羟基合铝酸钠中的羟基明明是氢氧根离子却叫做羟基?

一、为什么四羟基合铝酸钠中的「羟基」明明是 OH⁻ 离子&#xff0c;却叫做「羟基」&#xff1f; 这是一个很好的概念辨析问题&#xff0c;涉及到配位化学命名规则与无机化学传统命名的差异。 1. 在配位化合物中&#xff0c;OH⁻ 作为配体时的名称就是「羟基」 在配合物&#x…...

智能图像分层革命:5分钟将任何图片转换为可编辑PSD图层

智能图像分层革命&#xff1a;5分钟将任何图片转换为可编辑PSD图层 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 你是否曾面对一张精美的插画&#xff…...

拆解昇腾 CANN 五层架构:一个 MatMul 请求的完整旅程

适合人群&#xff1a;想从全局视角理解 CANN 架构的开发者 核心仓库&#xff1a;https://atomgit.com/cann 阅读时长&#xff1a;6 分钟 目录 一、为什么需要五层架构&#xff1f;二、第1层&#xff1a;昇腾计算语言层 AscendCL三、第2层&#xff1a;昇腾计算服务层四、第3层&…...

Legacy iOS Kit:让旧iPhone重获新生的终极降级工具

Legacy iOS Kit&#xff1a;让旧iPhone重获新生的终极降级工具 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit 你是…...

Halcon实战:告别调参玄学,用dyn_threshold和var_threshold搞定复杂光照下的缺陷检测

Halcon实战&#xff1a;告别调参玄学&#xff0c;用dyn_threshold和var_threshold搞定复杂光照下的缺陷检测 在工业视觉检测中&#xff0c;光照不均和背景纹理干扰是最令人头疼的问题之一。想象一下这样的场景&#xff1a;金属表面反光导致划痕时隐时现&#xff0c;印刷品上的油…...