栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

go实现导出excel或csv文件

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

go实现导出excel或csv文件

go实现导出excel或csv文件

很早之前的一个项目需求要,需要把公司信息列表和漏洞信息列表导出excel文件,没有很高要求,能看就行吧,就做了导出csv的两个接口。 最近看我的CSDN发现好久没有写了,惭愧啊!其实遇到的问题,我都有详细记录,自己能看懂,但分享给别人也能看懂就需要好好写了,尽量有空整吧,需要坚持!


实现代码

我把实现代码简单写了一下,是用调用接口的方式实现的,用的gin 包。

package main

import (
	"encoding/csv"
	"fmt"
	"github.com/gin-gonic/gin"
	"os"
	"time"
)

type ToCSV struct {
	engine *gin.Engine
}

func NewServer() *ToCSV {
	ser := &ToCSV{
	    // 用的gin.Default()引擎,自带Logger and Recovery两个中间件,也可以用gin.New(),不带中间件
		engine: gin.Default(),  
	}
	return ser
}

type Student struct {
	ID    string
	Name  string
	Age   string
	Score string
	Addr  string
	Date  string
}

// 此方法是为了造数据
func (t *ToCSV) getData() []*Student {
	res := make([]*Student, 0, 25)

	for i := 1; i <= 20; i++ {
		res = append(res, &Student{
			ID:    fmt.Sprintf("2021000000%d", i),
			Name:  fmt.Sprintf("辣条不能成精-%d", i),
			Age:   fmt.Sprintf("1%d", i),
			Score: fmt.Sprintf("8%d", i),
			Addr:  fmt.Sprintf("辣条小镇太平村-%d号", i),
			Date:  fmt.Sprintf("2012-12-%d", i),
		})
	}
	return res
}

// 实现csv文件写入的过程
func (t *ToCSV) toCsv() (string, error) {

	data := t.getData()
	strTime := time.Now().Format("20060102150405")
	filename := fmt.Sprintf("学生%s.csv", strTime)
	xlsFile, fErr := os.OpenFile("./"+filename, os.O_RDWR|os.O_CREATE, 0766)
	if fErr != nil {
		fmt.Println("Export:created excel file failed ==", fErr)
		return "", fErr
	}
	defer xlsFile.Close()

	xlsFile.WriteString("xEFxBBxBF")

	wStr := csv.NewWriter(xlsFile)
	wStr.Write([]string{"学生学号", "学生姓名", "学生年龄", "学生成绩", "家庭地址", "学生生日"})

	for _, s := range data {
		wStr.Write([]string{s.ID, s.Name, s.Age, s.Score, s.Addr, s.Date})
	}
	wStr.Flush()
	return filename, nil
}

// 给api返回前端用的,导出下载
func (t *ToCSV) csvApi(c *gin.Context) {

	filename, err := t.toCsv()
	if err != nil {
		fmt.Println("t.toCsv() failed == ", err)
	}

	if filename == "" {
		fmt.Println("export excel file failed == ", filename)
	}
	// 导出后删除文件
	defer func() {
		err := os.Remove("./" + filename)
		if err != nil {
			fmt.Println("remove  excel file failed", err)
		}
	}()
	c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", filename))
	c.Writer.Header().Add("Content-Type", "application/octet-stream")
	c.File("./" + filename)
}

// gin 调用接口
func (t *ToCSV) Start() {
    // 设置gin的模式,不设置默认为 测试模式
	gin.SetMode(gin.ReleaseMode)
	t.engine.GET("/csv", t.csvApi)
	t.engine.Run(":9999")
}

// 逻辑入口
func main() {
	NewServer().Start()
}

请求测试

请求地址: http://127.0.0.1:9999/csv
请求后会直接下载导出文件。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/903039.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号