日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

最近工作忙于作圖,圖表,經(jīng)常和Excel打交道,這不要讀寫excel文件。以前都是用Python,現(xiàn)在學(xué)習(xí)Go語言,剛好試試。

要操作excel,自然需要找讀寫Excel的Package,前人栽好樹,等我去乘涼。

去哪里找合適的Package呢?

Go語言的包在 https://pkg.go.dev/。打開就能搜索。這里錄入關(guān)鍵字xlsx(如果需要讀寫xls則錄入xls也可以)。

「GoLang編程」Go操作Excel表格

通過關(guān)鍵字找到需要的包

這里我們使用 github.com/tealeg/xlsx/v3

「GoLang編程」Go操作Excel表格

xlsx 的v3版本

先點擊Doc,看下文檔。

「GoLang編程」Go操作Excel表格

Document 文檔全面解釋了包

func FileToSlice ¶

func FileToSlice(path string, options ...FileOption) ([][][]string, error)

A convenient wrApper around File.ToSlice, FileToSlice will return the raw data contained in an Excel XLSX file as three dimensional slice. The first index represents the sheet number, the second the row number, and the third the cell number.

這個函數(shù)可以直接打開一個表格文件,讀取到一個3維切片中,第一維是sheet表,第二維是行,第三維是列。非常簡單方便。

其實我比較討厭這種包裝,因為打開文件之后,何時關(guān)閉不受我控制。

「GoLang編程」Go操作Excel表格

這個錯誤就是表格文件打開后沒有關(guān)閉,再次打開導(dǎo)致異常

For example:

var mySlice [][][]string
var value string
mySlice = xlsx.FileToSlice("myXLSX.xlsx")
value = mySlice[0][0][0]   //這就是 A1 了,簡單吧
value = mySlice[0][0][1]   //這就是 A1 了,簡單吧

Here, value would be set to the raw value of the cell A1 in the first sheet in the XLSX file.

如果代碼中需要遍歷每一個sheet表格,需要range 循環(huán)

sheetsn := len(mySlice)   //sheet 個數(shù)
rows :=len(mySlice[0])    //行數(shù)
cols :=len(mySlice[0][0]) //列數(shù)

怎么讀excel文件表格內(nèi)容?

舉個例子:

 

「GoLang編程」Go操作Excel表格

準(zhǔn)備讀的文件

func xlxsreadtotable(pathname string){
    var mySlice [][][]string   
    var err error   
    mySlice ,err= xlsx.FileToSliceUnmerged(pathname)
    value := mySlice[0]
    sheetsn := len(mySlice)   //sheet 個數(shù)  
    rows :=len(mySlice[0])    //行數(shù)   
    cols :=len(mySlice[0][0]) //列數(shù)   
    fmt.Println( value,err)
    fmt.Println( sheetsn,cols,rows)
          //            表 行 列   
    A1 := mySlice[0][0][0]   //這就是 A1   
    B1 := mySlice[0][0][1]   //這就是 B1   
    A2 := mySlice[0][1][0]  //A2   
    B2 := mySlice[0][1][1]  //B2   
    C1 := mySlice[0][0][2]  //C1   
    fmt.Println("A1:",A1,"A2:",A2,"B1:",B1,"B2:",B2,"C1:",C1)
}
「GoLang編程」Go操作Excel表格

 

運行結(jié)果:

「GoLang編程」Go操作Excel表格

結(jié)果正確

如果使用OpenFile則代碼會是這樣:

func readxlsx(pathname string)  {
   wb, err := xlsx.OpenFile(pathname)
   if err != nil {panic(err)}
   // wb 引用 workbook   
   fmt.Println("Sheets in this file:")
   for i, sh := range wb.Sheets {
      fmt.Println(i, sh.Name)
   }
   fmt.Println("----")

}

那怎么改寫一個excel的內(nèi)容呢?

func editexlsx(pathname string)  {
       //改寫一下某cell   
    wb, _ := xlsx.OpenFile(pathname)

     cell ,_:= wb.Sheet["Sheet1"].Cell(3,3)
     cell.Value ="改寫D4"   wb.Save(pathname)
}

運行結(jié)果:

「GoLang編程」Go操作Excel表格

D4格子被改寫成功

看文檔還支持各種,表格格式,字體大小,文字顏色。

func SetDefaultFont ¶ 設(shè)置字體和字體大小

func SetDefaultFont(size float64, name string)  

func SkipEmptyCells ¶ 在Row.ForEachCell循環(huán)中跳過空cell

func SkipEmptyCells(flags *cellVisitorFlags)

SkipEmptyCells can be passed as an option to Row.ForEachCell in order to make it skip over empty cells in the sheet.

func SkipEmptyRows ¶ 同理也可跳過空行

func SkipEmptyRows(flags *rowVisitorFlags)

SkipEmptyRows can be passed to the Sheet.ForEachRow function to cause it to skip over empty Rows.

讀寫表格時,從表格得到時間需要用 TimeFromExcelTime()轉(zhuǎn)換。

寫表格時,時間需要轉(zhuǎn)換成excel時間 TimeToExcelTime()。

如果表格超大,記得調(diào)用一下函數(shù) UseDiskVCellStore(f *File)

如果表格較小,還可以全部放內(nèi)存來加快表格處理,函數(shù) UseMemoryCellStore(f *File)。

整數(shù)行列,可以直接轉(zhuǎn)換到字符串,如下:

y := xlsx.RowIndexToString(2)
x :=xlsx.ColIndexToLetters(3)
   fmt.Println("x3:",x,"  y2:",y)

運行如下:

「GoLang編程」Go操作Excel表格

列索引3 即D,行索引2即第 3行

實際工作中,應(yīng)該還需要整行寫。就需要單獨設(shè)計一個rowWrite函數(shù),內(nèi)部實現(xiàn)還是拆成一個個cell去寫。

總結(jié),

Go寫Excel感覺上比Python還簡單。坑少。

分享到:
標(biāo)簽:表格 語言 Excel
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達(dá)人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定