golang 导出CSV文件

一个新的管理后台需要增加一个小报表的导出,第一次用golang从0写导出CSV,找了下资料并实践后做下记录


func (c *cMapiReport) ExportXXXXX(r *ghttp.Request) {
    //内容先写入buffer缓存 
    buff :=  new(bytes.Buffer)

    //写入UTF-8 BOM,此处如果不写入就会导致写入的汉字乱码
    buff.WriteString("\xEF\xBB\xBF")

    csvWriter := csv.NewWriter(buff)
    //写入表头
    csvWriter.Write([]string{
       "XXID", "订单号", "发起时间", "接单时间", "XX时间", "错误信息", "耗时(秒)", "机器编号",
    })

    //写入内容
    for i := 0; i < len(output.Items); i++ {
       outputItem := output.Items[i]
       csvWriter.Write([]string{
       gconv.String(outputItem.Id),
       outputItem.OrderSn,
       outputItem.RequestTime.String(),
       outputItem.DispatchTime.String(),
       outputItem.CallbackTime.String(),
       outputItem.ErrMsg,
       outputItem.ManHour,
       outputItem.HostName,
      })
    }

    //将缓冲区数据写入
    csvWriter.Flush()

    //设置http表头为下载
    r.Response.Header().Set("Content-Type", "application/force-download")
    r.Response.Header().Set("Accept-Ranges", "bytes")
    r.Response.Header().Set("Content-Disposition", fmt.Sprintf(`attachment;filename=%s`, url.QueryEscape("XX详情导出"+req.StartDate+"&"+req.EndDate+".csv")))
    r.Response.Write(buff.Bytes())
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!