需要引入 “github.com/tealeg/xlsx” 这个第三方库

关键代码:

file := xlsx.NewFile()
sheet,_ :=file.AddSheet("sheet")
//设置表格头
row := sheet.AddRow()
var headers = []string {"row1","row2"....}
for _,header := range headers{
            row.AddCell().Value = header
}
//写入数据
for i, log := range logs {
            row := sheet.AddRow()
            row.AddCell().Value = strconv.Itoa(i)
            row.AddCell().Value = string(log.Operation)
            row.AddCell().Value = strconv.FormatInt(log.FileId, 10)
            ......          
}
ctx.ResponseWriter.Header().Add("Content-Disposition", "attachment")
//ctx.ResponseWriter.Header().Add("Content-Type", "application/vnd.ms-excel")
//xlsx
ctx.ResponseWriter.Header().Add("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")

var buffer bytes.Buffer
if err := file.Write(&buffer); err != nil {
    return err
}
r := bytes.NewReader(buffer.Bytes())
http.ServeContent(ctx.ResponseWriter, ctx.Request, filename, time.Now(), r)

其中采取的是直接把数据写入responsewriter 中进行返回,数据量大的情况下可能会出问题
也可以先把文件保存在服务器上,然后通过 http.ServeFile返回给浏览器

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐