Go语言后台实现选中式导出excel文件

实现选中导出为excel文件的基本实现方案是前端将选中的数据传递给后端,后台接受这些数据生成excel文件的流,将流返回给前端并在响应体设置文件的格式。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这时只要将需要下载的数据提交到改接口就会返回文件流数据,提供下载。具体实现代码如下:

  • 工具库

https://github.com/douyacun/go-struct-excel

go get github.com/douyacun/go-struct-excel

具体的代码实现参考github示例代码

  • 创建导出的结构体
type Company struct {
    ID                    string    `json:"id" excel:"主键"`
    Creater               string    `json:"creater" excel:"创建人"`
    CreateTime            string    `json:"create_time" excel:"创建时间"`
    Updater               string    `json:"updater" excel:"更新人"`
    UpdateTime            string    `json:"update_time" excel:"更新时间"`
    IsDelete              int32     `json:"is_delete" excel:"是否删除"`
    Version               int32     `json:"version" excel:"版本"`
    TenantID              string    `json:"tenant_id" excel:"多版本唯一标识"`
    CreditCode            string    `json:"credit_code" excel:"企业社会信用代码"`
    Name                  string    `json:"name" excel:"企业名称"`
    Address               string    `json:"address" excel:"企业地址"`
    Type                  string    `json:"type" excel:"企业类型"`
    LegalPersonName       string    `json:"legal_person_name" excel:"企业法人"`
    LegalPersonIDNo       string    `json:"legal_person_id_no" excel:"企业法人身份证"`
    LegalPersonPhoneNo    string    `json:"legal_person_phone_no" excel:"企业法人电话"`
    ContractPersonName    string    `json:"contract_person_name" excel:"企业联系人姓名"`
    ContractPersonIDNo    string    `json:"contract_person_id_no" excel:"企业联系人身份证"`
    ContractPersonPhoneNo string    `json:"contract_person_phone_no" excel:"企业联系人联系电话"`
    RegisterDate          string    `json:"register_date" excel:"注册时间"`
    Remark                string    `json:"remark" excel:"备注"`
    Lon                   float64   `json:"lon" excel:"经度"`
    Lat                   float64   `json:"lat" excel:"纬度"`
    Geom                  string    `json:"geom" excel:"位置信息"`
    ProvinceID            string    `json:"province_id" excel:"省级编码"`
    CityID                string    `json:"city_id" excel:"市级编码"`
    AreaID                string    `json:"area_id" excel:"区级编码"`
}

json标签的作用用于结构体来自前端的数据,excel的标签用户生成excel的表头。

  • 生成excel的文件流
// 导出为excel文件流
// T为任意了类型
// data参数为T类型的指针数组,必须是指针数组
// name为导出的问加盟
func Export[T any](data []T, name string, sheetName string) ([]byte, error) {
	// helloworld.xlsx
	if name == "" {
		name = "test.xlsx"
	}
	if !strings.Contains(name, ".xlsx") {
		name = name + ".xlsx"
	}
	excel := ex.NewExcel(name)
	defer excel.File.Close()
	sheet, err := excel.AddSheet(sheetName)
	if err != nil {
		return nil, err
	}
	if err = sheet.AddData(data); err != nil {
		return nil, err
	}
	return excel.Bytes()
}

这里包装了一下,数据使用指针数组传递,同时传递exel文件名和sheet页数

  • 接口返回文件流
// 导出企业库
func ExportCom(c *fiber.Ctx) error {
	var req []model.BaseCompanyCopy

	if err := c.BodyParser(&req); err != nil {
		return http_resp.Fail(c, "参数错误")
	}
	var data []*excel.Company
	for i := 0; i < len(req); i++ {
		tmp := utils.StructTimeCopy[model.BaseCompanyCopy, excel.Company](req[i])
		data = append(data, &tmp)
	}
	export, err := excel.Export[*excel.Company](data, "企业信息", "企业信息")
	if err != nil {
		return http_resp.Fail(c, "导出失败")
	}
	c.Set("Content-Disposition", "attachment; filename=file"+".xlsx")
	return c.Send(export)
}

这里使用fiber的web框架ctx.Set()这部很重要,用户设置文件的下载文件的名称。

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

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

相关文章

大模型微调---Prompt-tuning微调

目录 一、前言二、Prompt-tuning实战2.1、下载模型到本地2.2、加载模型与数据集2.3、处理数据2.4、Prompt-tuning微调2.5、训练参数配置2.6、开始训练 三、模型评估四、完整训练代码 一、前言 Prompt-tuning通过修改输入文本的提示&#xff08;Prompt&#xff09;来引导模型生…

spring学习(spring-bean实例化(实现FactoryBean规范)(延迟实例化bean))

目录 一、spring容器实例化bean的几种方式。 &#xff08;1&#xff09;无参构造与有参构造方法。 &#xff08;2&#xff09;静态工厂与实例工厂。 &#xff08;3&#xff09;实现FactoryBean规范。 二、spring容器使用实现FactoryBean规范方式实现bean实例化。 &#xff08;1…

【Java】mac安装Java17(JDK17)

文章目录 下载java17一、安装二、环境变量 下载java17 官网下载&#xff1a;https://www.oracle.com/java/technologies/downloads 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、安装 直接安装后&#xff0c;安装完后目录会存放在下面目录下 /…

mysql免安装版配置教程

一、将压缩包解压至你想要放置的文件夹中&#xff0c;注意&#xff1a;绝对路径中要避免出现中文 二、在解压目录下新建my.ini文件&#xff0c;已经有的就直接覆盖 my.ini文件内容 [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 basedirD:\\tools\\mysql-8.1.0-win…

web:pc端企业微信登录-vue版

官方文档&#xff1a;developer.work.weixin.qq.com/document/pa… 不需要调用ww.register&#xff0c;直接调用ww.createWWLoginPanel即可创建企业微信登录面板 - 文档 - 企业微信开发者中心 (qq.com) 引入 //通过 npm 引入 npm install wecom/jssdk import * as ww from we…

基于Spring Boot的无可购物网站系统

一、系统背景与意义 随着互联网的快速发展&#xff0c;电子商务已经成为人们日常生活的重要组成部分。构建一个稳定、高效、可扩展的电商平台后端系统&#xff0c;对于满足用户需求、提升用户体验、推动业务发展具有重要意义。Spring Boot作为当前流行的Java开发框架&#xff…

YOLOv11改进,YOLOv11添加DLKA-Attention可变形大核注意力,WACV2024 ,二次创新C3k2结构

摘要 作者引入了一种称为可变形大核注意力 (D-LKA Attention) 的新方法来增强医学图像分割。这种方法使用大型卷积内核有效地捕获体积上下文,避免了过多的计算需求。D-LKA Attention 还受益于可变形卷积,以适应不同的数据模式。 理论介绍 大核卷积(Large Kernel Convolu…

fpga系列 HDL:Quartus II PLL (Phase-Locked Loop) IP核 (Quartus II 18.0)

在 Quartus II 中使用 PLL (Phase-Locked Loop) 模块来将输入时钟分频或倍频&#xff0c;并生成多个相位偏移或频率不同的时钟信号&#xff1a; 1. 生成 PLL 模块 在 Quartus II 中&#xff1a; 打开 IP Components。 file:///C:/intelFPGA_lite/18.0/quartus/common/help/w…

JAVA:代理模式(Proxy Pattern)的技术指南

1、简述 代理模式(Proxy Pattern)是一种结构型设计模式,用于为其他对象提供一种代理,以控制对这个对象的访问。通过代理模式,我们可以在不修改目标对象代码的情况下扩展功能,满足特定的需求。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什…

3D Gaussian Splatting for Real-Time Radiance Field Rendering-简洁版

1. 研究背景与问题 传统的3D场景表示方法&#xff0c;如网格和点云&#xff0c;适合GPU加速的光栅化操作&#xff0c;但缺乏灵活性。而基于神经辐射场&#xff08;NeRF&#xff09;的表示方式&#xff0c;尽管质量高&#xff0c;但需要高成本的训练和渲染时间。此外&#xff0…

Unity性能优化---使用SpriteAtlas创建图集进行批次优化

在日常游戏开发中&#xff0c;UI是不可缺少的模块&#xff0c;而在UI中又使用着大量的图片&#xff0c;特别是2D游戏还有很多精灵图片存在&#xff0c;如果不加以处理&#xff0c;会导致很高的Batches&#xff0c;影响性能。 比如如下的例子&#xff1a; Batches是9&#xff0…

计算机网络知识点全梳理(三.TCP知识点总结)

目录 TCP基本概念 为什么需要TCP 什么是TCP 什么是TCP链接 如何唯一确定一个 TCP 连接 TCP三次握手 握手流程 为什么是三次握手&#xff0c;而不是两次、四次 为什么客户端和服务端的初始序列号 ISN 不同 既然 IP 层会分片&#xff0c;为什么 TCP 层还需要 MSS TCP四…

找出1000以内的所有回文数

找出1000以内的所有回文数 方法概述检查回文数的方法伪代码C代码实现代码解析运行结果在计算机科学中,回文数是一种具有对称性质的数,即从左向右读和从右向左读都是相同的。例如,121、1331、12321都是回文数。本文将利用数据结构、C语言和算法的知识来编写一个程序,找出100…

Go-FastDFS文件服务器一镜到底使用Docker安装

本文章介绍一镜到底安装go-fastdfs并配置数据文件到linux 由于国内镜像无法安装go-fastdfs&#xff1a;国内环境已经把docker官方的网站给封闭了 我们需要从国外的一台服务器&#xff0c;下载images镜像&#xff0c;然后进行转发加载到国内服务器 当然我也给你们准备了docke…

ArcGIS计算土地转移矩阵

在计算土地转移矩阵时&#xff0c;最常使用的方法就是在ArcGIS中将土地利用栅格数据转为矢量&#xff0c;然后采用叠加分析计算&#xff0c;但这种方法计算效率低。还有一种方法是采用ArcGIS中的栅格计算器&#xff0c;将一个年份的地类编号乘以个100或是1000再加上另一个年份的…

软路由系统 --- VMware安装与配置OpenWRT

目录: OpenWrt安装与配置 一、下载OpenWRT映像二、img转换vmdk格式三、创建虚拟机&#xff08;OpenWRT&#xff09;四、启动系统&#xff08;OpenWRT&#xff09;五、配置网络信息&#xff08;LAN、WAN&#xff09;六、登录OpenWRT后台管理界面 一、下载OpenWRT映像 OpenWrt映…

利用notepad++删除特定关键字所在的行

1、按组合键Ctrl H&#xff0c;查找模式选择 ‘正则表达式’&#xff0c;不选 ‘.匹配新行’ 2、查找目标输入 &#xff1a; ^.*关键字.*\r\n (不保留空行) ^.*关键字.*$ (保留空行)3、替换为&#xff1a;&#xff08;空&#xff09; 配置界面参考下图&#xff1a; ​​…

Moretl开箱即用日志采集

永久免费: 至Gitee下载 使用教程: Moretl使用说明 使用咨询: 用途 定时全量或增量采集工控机,电脑文件或日志. 优势 开箱即用: 解压直接运行.不需额外下载.管理设备: 后台统一管理客户端.无人值守: 客户端自启动,自更新.稳定安全: 架构简单,兼容性好,通过授权控制访问. 架…

Java中的全局异常捕获与处理

引言 Java编程中&#xff0c;异常情况是不可避免的&#xff0c;优秀的异常处理机制是保证程序稳定性和可靠性的重要因素&#xff0c;当程序出现异常的时候&#xff0c;如果没有进行适当的处理&#xff0c;可能导致程序崩溃&#xff0c;丢失数据等严重问题。全局异常捕获与处理可…

基于Spring Boot的小区车辆管理系统

一、系统背景与目的 随着城市化进程的加快&#xff0c;小区内的车辆数量急剧增加&#xff0c;车辆管理问题日益凸显。传统的车辆管理方式存在效率低、易出错、信息不透明等问题。为了解决这些问题&#xff0c;基于Spring Boot的小区车辆管理系统应运而生。该系统旨在通过信息化…