使用go語言對csv檔案進行解析處理,匯入匯出。

我可是千機傘發表於2020-09-23

使用的框架是gin
包為”github.com/gocarina/gocsv”
建立csv檔案並且匯出給前端

import (
"github.com/gocarina/gocsv"
)
//建立檔案流
    f, err := os.Create("dictList.csv")
    //關閉流
    defer f.Close()
    //寫入UTF-8 格式
    f.WriteString("\xEF\xBB\xBF")
     var newContent [][]string
     //新增資料
    newContent = append(newContent, []string{"1", "2", "3", "4", "5", "6"})
    //儲存檔案流
    err = gocsv.MarshalFile(newContent, f)
    if err != nil {
        response.FailWithMessage(err.Error(), c)
        return
    }
    //傳輸檔案流(使用gin或者http的時候向前端傳送的流檔案)
    c.File("dictList.csv")
    //刪除檔案
    _ = os.Remove("dictList.csv")
 )

解析csv檔案並且匯出給前端
response.FailWithMessage為自己封裝的報錯資訊,根據自己實際情況做出改變

//獲取檔案頭
    file, err := c.FormFile("file")
    if err != nil {
        response.FailWithMessage(err.Error(), c)
        return
    }
    //獲取檔名
    fileName := file.Filename
    //獲取檔案字尾名
    fileSuffix := path.Ext(fileName)
    //字尾名判斷
    if fileSuffix != ".csv" {
        response.FailWithMessage("檔案字尾格式有誤", c)
        return
    }
    //SaveUploadedFile(檔案頭,儲存路徑)
    if err := c.SaveUploadedFile(file, fileName); err != nil {
        response.FailWithMessage("儲存失敗", c)
        os.Remove(fileName)
        return
    }
    //開啟流
    clientsFile, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, os.ModePerm)
    if err != nil {
        response.FailWithMessage(err.Error(), c)
        os.Remove(fileName)
        return
    }
    //關閉流
    defer clientsFile.Close()
    //解析csv檔案到結構體,clients為自己定義的結構體
    if err := gocsv.UnmarshalFile(clientsFile, &clients); err != nil {
        response.FailWithMessage("檔案內容格式有誤", c)
        os.Remove(fileName)
        return
    }
        for _, client := range clients {
    .....
    //遍歷clients,每個結構體引數用client來獲取,並按照需求進行處理
}
//刪除上傳檔案
    os.Remove(fileName)
    insert.Commit()
    response.OkWithMessage("匯入成功", c)
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章