最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你搞懂Go如何讀寫Excel文件

 更新時間:2022年11月08日 15:34:42   作者:Barry?Yan  
Excelize是一個用純Go語言編寫的庫,提供了一組函數(shù),可以對XLAM?/?XLSM?/?XLSX?/?XLTM?/?XLTX文件進行讀寫。支持讀寫由Microsoft?Excel?2007及以后版本生成的電子表格文檔。本文就將用它實現(xiàn)讀寫Excel文件操作,感興趣的可以學(xué)習(xí)一下

Excelize是一個用純Go語言編寫的庫,提供了一組函數(shù),可以對XLAM / XLSM / XLSX / XLTM / XLTX文件進行讀寫。支持讀寫由Microsoft Excel™2007及以后版本生成的電子表格文檔。通過高兼容性支持復(fù)雜組件,并提供流API從具有大量數(shù)據(jù)的工作表中生成或讀取數(shù)據(jù)。該庫需要Go 1.16或更高版本。

那么本篇文章將會介紹我們操作Excel的常用功能,如下:

  • 生成一個新的Excel文件
  • 向Excel文件中追加內(nèi)容
  • 解析Excel文件內(nèi)容
  • 使用Http協(xié)議上傳并解析Excel文件
  • 使用Http協(xié)議將數(shù)據(jù)轉(zhuǎn)換為Excel文件并下載

1.下載依賴庫

go get github.com/xuri/excelize

# Go Modules使用這個命令
go get github.com/xuri/excelize/v2

2.具體操作

2.1 生成一個新的Excel文件

func WriteNewExcel() {
   f := excelize.NewFile()
   // 創(chuàng)建一個sheet
   index := f.NewSheet("Sheet2")
   // 根據(jù)sheet和坐標 確定一個值
   // 例如f.SetCellValue("Sheet2", "A2", "Hello world.")就是在Sheet表中A列第2行的格子里填入Hello world.
   f.SetCellValue("Sheet2", "A2", "Hello world.")
   f.SetCellValue("Sheet1", "B1", 100)
   f.SetCellValue("Sheet1", "B2", 100)
   // 將新的sheet添加到Excel中
   f.SetActiveSheet(index)
   // 保存Excel
   if err := f.SaveAs("Book1.xlsx"); err != nil {
      fmt.Println(err)
   }
}

2.2 向Excel文件中追加內(nèi)容

func WriteExcel() {
   f, _ := excelize.OpenFile("Book1.xlsx")
   index := f.NewSheet("Sheet2")
   f.SetCellValue("Sheet2", "A2", "Hello world.")
   f.SetCellValue("Sheet1", "B1", 100)
   f.SetCellValue("Sheet1", "B2", 100)
   f.SetActiveSheet(index)
   if err := f.SaveAs("Book1.xlsx"); err != nil {
      fmt.Println(err)
   }
}

2.3 解析Excel文件內(nèi)容

func ReadExcel() {
   f, err := excelize.OpenFile("Book1.xlsx")
   if err != nil {
      fmt.Println(err)
      return
   }
   defer func() {
      if err := f.Close(); err != nil {
         fmt.Println(err)
      }
   }()
   // 根據(jù)sheet和坐標讀取某一個格子的值
   cell, err := f.GetCellValue("Sheet1", "B2")
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println(cell)
   // 按行讀取全部
   rows, err := f.GetRows("Sheet1")
   if err != nil {
      fmt.Println(err)
      return
   }
   for _, row := range rows {
      for _, colCell := range row {
         fmt.Print(colCell, "\t")
      }
      fmt.Println()
   }
}

2.4 使用Http協(xié)議上傳并解析Excel文件

func HttpReadExcel() {
   f := func(read io.Reader) {
      file, err := excelize.OpenReader(read)
      if err != nil {
         fmt.Println(err)
         return
      }
      for _, item := range file.GetSheetList() {
         rows, _ := file.GetRows(item)
         // rows是一個二維數(shù)組
         for i := range rows {
            strs := rows[i]
            for j := range strs {
               str := rows[i][j]
               fmt.Println(str)
            }
         }
      }
   }
   http.HandleFunc("/excel", func(w http.ResponseWriter, r *http.Request) {
      file, _, err := r.FormFile("file")
      if err != nil {
         fmt.Println(err)
         return
      }
      fileBytes, err := ioutil.ReadAll(file)
      if err != nil {
         fmt.Println(err)
         return
      }
      reader := bytes.NewReader(fileBytes)
      f(reader)
      w.Write([]byte("Hello Http Get!"))
   })
   http.ListenAndServe(":8080", nil)
}

2.5 使用Http協(xié)議將數(shù)據(jù)轉(zhuǎn)換為Excel文件并下載

func HttpDownloadExcel() {
   fun := func(fileName string) *bytes.Reader {
      f := excelize.NewFile()
      f.SetCellValue("Sheet1", "B1", 100)
      err := f.SaveAs(fileName)
      if err != nil {
         fmt.Println(err)
      }
      var buffer bytes.Buffer
      _ = f.Write(&buffer)
      return bytes.NewReader(buffer.Bytes())
   }
   http.HandleFunc("/downloadExcel", func(w http.ResponseWriter, r *http.Request) {
      reader := fun("Book2.xlsx")
      // 重新設(shè)置文件名稱
      w.Header().Set("Content-Disposition", "attachment; filename="+"Book2.xlsx")
      io.Copy(w, reader)
   })
   http.ListenAndServe(":8080", nil)
}

3.小總結(jié)

以上功能只需靈活擴展后基本上就可以覆蓋大部分業(yè)務(wù)了,但是有一點需要注意,在2.5使用Http協(xié)議將數(shù)據(jù)轉(zhuǎn)換為Excel文件并下載這個操作中,需要將文件進行重命名,這個名稱可以自定義,也可以由服務(wù)端指定,但是需要以相關(guān)文件類型的名稱做后綴,否則會輸出zip壓縮文件,很難看懂。

到此這篇關(guān)于一文帶你搞懂Go如何讀寫Excel文件的文章就介紹到這了,更多相關(guān)Go讀寫Excel文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入string理解Golang是怎樣實現(xiàn)的

    深入string理解Golang是怎樣實現(xiàn)的

    這篇文章主要為大家介紹了深入string理解Golang是怎樣實現(xiàn)的原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Go1.18都出泛型了速來圍觀

    Go1.18都出泛型了速來圍觀

    泛型允許程序員在強類型程序設(shè)計語言中編寫代碼時使用一些以后才指定的類型,在實例化時作為參數(shù)指明這些類型,本文通過例子給大家介紹下如何使用泛型,對Go1.18泛型相關(guān)知識感興趣的朋友一起看看吧
    2022-03-03
  • golang簡單tls協(xié)議用法完整示例

    golang簡單tls協(xié)議用法完整示例

    這篇文章主要介紹了golang簡單tls用法,分析了tls協(xié)議的使用步驟及客戶端與服務(wù)器端的相關(guān)實現(xiàn)代碼,需要的朋友可以參考下
    2016-07-07
  • GO實現(xiàn)跳躍表的示例詳解

    GO實現(xiàn)跳躍表的示例詳解

    跳表全稱叫做跳躍表,簡稱跳表,是一個隨機化的數(shù)據(jù)結(jié)構(gòu),實質(zhì)就是一種可以進行二分查找的有序鏈表。本文將利用GO語言編寫一個跳表,需要的可以參考一下
    2022-12-12
  • GoLang并發(fā)機制探究goroutine原理詳細講解

    GoLang并發(fā)機制探究goroutine原理詳細講解

    goroutine是Go語言提供的語言級別的輕量級線程,在我們需要使用并發(fā)時,我們只需要通過 go 關(guān)鍵字來開啟 goroutine 即可。這篇文章主要介紹了GoLang并發(fā)機制goroutine原理,感興趣的可以了解一下
    2022-12-12
  • Go日志框架zap增強及源碼解讀

    Go日志框架zap增強及源碼解讀

    這篇文章主要為大家介紹了Go日志框架zap增強及源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Go語言常見錯誤之濫用getters/setters誤區(qū)實例探究

    Go語言常見錯誤之濫用getters/setters誤區(qū)實例探究

    在Go語言編程中,恰如其分地使用getters和setters是至關(guān)重要的,過度和不適當(dāng)?shù)厥褂盟鼈兛赡軐?dǎo)致代碼冗余、可讀性差和封裝不當(dāng),在本文中,我們將深入探討如何識別濫用getter和setter的情況,以及如何采取最佳實踐來避免這些常見的Go錯誤
    2024-01-01
  • Go語言等待組sync.WaitGrou的使用示例

    Go語言等待組sync.WaitGrou的使用示例

    本文主要介紹了Go語言等待組sync.WaitGrou的使用示例,sync.WaitGroup只有3個方法,Add(),Done(),Wait(),下面就來具體的介紹一下如何使用,感興趣的可以了解一下
    2024-08-08
  • 詳解Go語言中數(shù)組,切片和映射的使用

    詳解Go語言中數(shù)組,切片和映射的使用

    Arrays (數(shù)組), Slices (切片) 和 Maps (映射) 是常見的一類數(shù)據(jù)結(jié)構(gòu)。這篇文章將為大家詳細介紹一下Go語言中數(shù)組,切片和映射的使用,感興趣的可以學(xué)習(xí)一下
    2022-07-07
  • Go語言入門exec的基本使用示例

    Go語言入門exec的基本使用示例

    這篇文章主要為大家介紹了Go語言入門exec在go語言中的基本使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05

最新評論

神木县| 和政县| 融水| 康定县| 广州市| 内乡县| 苏州市| 曲阳县| 湖口县| 财经| 余江县| 大洼县| 平顺县| 京山县| 海兴县| 铜山县| 博兴县| 温宿县| 永济市| 射阳县| 崇仁县| 客服| 嘉禾县| 海南省| 北碚区| 团风县| 嘉祥县| 南涧| 道真| 久治县| 丹巴县| 商河县| 文山县| 阳新县| 兰西县| 青龙| 壤塘县| 永清县| 高州市| 石棉县| 富锦市|