为了账号安全,请及时绑定邮箱和手机立即绑定

在 Golang 中导出为 CSV 时保留字符串的前导零

在 Golang 中导出为 CSV 时保留字符串的前导零

Go
烙印99 2022-12-19 10:59:02
我有一个使用 Gin 框架的 Go 应用程序,它将结构导出到 CSV。一列userCode要求导出的字段保留字符串的所有前导零。例如,对于 , , 等字符串000001,010101CSV000000中导出的字段应该具有完全相似的值。但是,如果我直接将字符串附加到行并写入缓冲区,导出的字段将发出所有前导零并且值变为:1,,,我做了一些挖掘10101, 看来这个问题可以通过设置列类型来解决在读取 csv 文件时在 Excel 中,但我想知道这是否可以在 Go 程序中解决?谢谢!我的CSV导出相关功能:func (h *HandleManager) ExportUsers() gin.HandlerFunc {        var buf bytes.Buffer        writer := csv.NewWriter(&buf)        var cols = []string{"User Name", ..., ....}        writer.Write(cols)        for _, e := range users {            var row []string            // ....            row = append(row, e.userCode) // type: string            if err := writer.Write(row); err != nil {                log.Errorff(h.logCtx, "ExportUsers|WriteToCSV|err:%v", err)                c.AbortWithStatus(http.StatusInternalServerError)                return            }        }        writer.Flush()        c.Writer.Header().Set("Content-Type", "text/csv")        c.Writer.Header().Set("Content-Disposition", "attachment;filename="+csvFileName+".csv")        c.Writer.Write(buf.Bytes())}
查看完整描述

2 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

经过几次尝试,我找到了在 golang 中有效的解决方案,感谢@Steffen Ullrich 提供的链接。类似于在 VB 中的工作,而不是两边的两个引号,一个应该足够了:

row = append(row, "=\""+e. userCode +"\"")

将包含 CSV 文件中的所有前导零:

000001, 010101, 000000


查看完整回答
反对 回复 2022-12-19
?
MMTTMM

TA贡献1869条经验 获得超4个赞

我测试了你的代码,结果在 excel 中会丢失零,但在 txt 阅读器中不会;


代码:


func main() { type user struct { Name string Code string }


 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

     var buf bytes.Buffer

     writer := csv.NewWriter(&buf)

     var cols = []string{"Name", "Code"}

     writer.Write(cols)

     users := []user{{Name: "Tome", Code: "001"}, {Name: "James", Code: "000"}}


     for _, e := range users {

         err := writer.Write([]string{e.Name, e.Code})

         if err != nil {

             log.Fatalln(err)

         }

     }

     writer.Flush()

     w.Header().Set("Content-Type", "text/csv")

     w.Header().Set("Content-Disposition", "attachment;filename="+"test.csv")


     w.Write(buf.Bytes())


 })


 http.ListenAndServe(":8080", nil)

}

结果://img1.sycdn.imooc.com//639fd39d0001e1f702560180.jpg

查看完整回答
反对 回复 2022-12-19
  • 2 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信