go实现导出excel或csv文件

go实现导出excel或csv文件,第1张

go实现导出excelcsv文件

很早之前的一个项目需求要,需要把公司信息列表和漏洞信息列表导出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("\xEF\xBB\xBF")

	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
请求后会直接下载导出文件。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/989966.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存