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

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



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

  • 工具库

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

shell 复制代码
go get github.com/douyacun/go-struct-excel

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

  • 创建导出的结构体
go 复制代码
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的文件流
go 复制代码
// 导出为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页数

  • 接口返回文件流
go 复制代码
// 导出企业库
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()这部很重要,用户设置文件的下载文件的名称。

相关推荐
魔力女仆4 小时前
分享一个 JS 鼠标跟随贪吃蛇背景库
开发语言·javascript·计算机外设
2401_894915535 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
麻瓜老宋5 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十二步,分号赋值链式修复、TOKEN_ASSIGN
c语言·开发语言·atomcode
FellAveal6 小时前
【Go语言入门学习笔记】Part18.工作池与WaitGroup(也即协程池)
笔记·学习·golang
颜x小7 小时前
[C#] C++与c#语法对比
开发语言·c++·c#
weixin_423652137 小时前
C#使用JObject
开发语言·c#
国科安芯7 小时前
FreeRTOS RISC-V 浮点上下文切换移植:在 IAR 工程中完整保存 FPU 寄存器
java·开发语言·单片机·嵌入式硬件·算法·系统架构·risc-v
霸道流氓气质9 小时前
Java中集成Smile 技术教程:从入门到工程实践
java·开发语言
BerrySen1789 小时前
迈向 Next-Gen Java:企业级高并发架构演进与大模型 Agent 落地深度实战
java·开发语言·架构
Nebula_g10 小时前
Java实现本地Socket通信(三)
java·开发语言·学习·socket·可视化