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

news/2024/12/26 2:48:41/

实现选中导出为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文件流
// T为任意了类型
// data参数为T类型的指针数组,必须是指针数组
// name为导出的问加盟
func Export[T any](data []T, name string, sheetName string) ([]byte, error) {// helloworld.xlsxif 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.BaseCompanyCopyif err := c.BodyParser(&req); err != nil {return http_resp.Fail(c, "参数错误")}var data []*excel.Companyfor 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()这部很重要,用户设置文件的下载文件的名称。


http://www.ppmy.cn/news/1557805.html

相关文章

Sentinel底层原理以及使用算法

Sentinel底层原理以及使用算法 前言为什么要进行服务保护线程隔离原理基于线程池基于信号量 请求限流原理固定时间窗口算法滑动时间窗口算法令牌桶算法 漏桶算法 前言 关于微服务项目中的服务保护&#xff0c;我们会使用第三方的组件&#xff0c;例如Sentinel或者Hystrix&…

Android okhttp 网络链接各阶段监控

步骤 1: 添加依赖 在项目的 build.gradle 文件中&#xff0c;添加 OkHttp 依赖&#xff1a; implementation com.squareup.okhttp3:okhttp:4.11.0 步骤 2: 创建自定义的 EventListener 创建一个自定义的 EventListener 类&#xff1a; import android.util.Log import okht…

Firefox 基本设置备忘

Firefox 基本设置备忘 记录一些常用的 Firefox 设置&#xff0c;可以帮助增强浏览体验&#xff1a; 标签页设置: browser.search.openintab: true 在搜索栏中搜索时&#xff0c;在新标签页中打开结果。browser.tabs.loadBookmarksInTabs: true 点击书签时&#xff0c;在新标…

Arm Cortex-M处理器对比表

Arm Cortex-M处理器对比表 当前MCU处理器上主要流行RISC-V和ARM处理器&#xff0c;其他的内核相对比较少&#xff1b;在这两种内核中&#xff0c;又以Arm Cortex-M生态环境相对健全&#xff0c;大部分的厂家都在使用ARM的处理器。本文主要介绍Arm Cortex-M各个不同系列的参数对…

leetcode hot100 合并区间

56. 合并区间 已解答 中等 相关标签 相关企业 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 示例 …

Android Java Ubuntu系统如何编译出 libopencv_java4.so

Cmake: cd ~ wget https://github.com/Kitware/CMake/releases/download/v3.30.3/cmake-3.30.3-linux-x86_64.tar.gztar -xzvf cmake-3.30.3-linux-x86_64.tar.gz sudo ln -sf $(pwd)/cmake-3.30.3-linux-x86_64/bin/* /usr/bin/cmake --versionAndroid NDK: wget https://…

一文了解 gis 相关服务=》及前端地图服务相关总结

文章目录 概要OGC技术名词解释cesium 应用案例openlayers 中应用实例XYZ服务OSM服务WMS服务WMTS服务WFS服务 mapbox 应用实例矢量瓦片服务栅格瓦片服务WMS服务WFS服务 leaflet 中 地图服务实例加载OpenStreetMap瓦片图层加载自定义XYZ瓦片图层加载WMS服务图层加载WFS服务图层加…

[机器学习]XGBoost(1)——前置知识

XGBoost简介 XGBoost&#xff08;eXtreme Gradient Boosting&#xff09;是一种一种高效的梯度提升决策树算法&#xff0c;它通过集成多个弱学习器&#xff08;决策树&#xff09;来构建一个强学习器。 核心思想&#xff1a; XGBoost的核心思想是Boosting&#xff0c;即通过…