我有一個使用 Gin 框架的 Go 應用程式,將結構匯出到 CSV。一列userCode要求匯出的欄位保留字串的所有前導零。
例如,對于 , , 等字串000001,010101CSV000000中匯出的欄位應該具有完全相同的值。但是,如果我直接將字串附加到行并寫入緩沖區,則匯出的欄位將發出所有前導零并且值變為:1, 10101, ,我做了一些挖掘,似乎可以通過設定列型別來解決這個問題在 Excel 中讀取 csv 檔案時,但我想知道這是否可以在 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())
}
uj5u.com熱心網友回復:
經過幾次嘗試,我找到了在 golang 中有效的解決方案,這要歸功于@Steffen Ullrich 提出的鏈接。類似于在VB中的作業,而不是兩邊的兩個引號,一個就足夠了:
row = append(row, "=\"" e. userCode "\"")
將包含 CSV 檔案中的所有前導零:
000001, 010101, 000000
uj5u.com熱心網友回復:
我測驗了你的代碼,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)}
結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/483593.html
