<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Golang是如何操作excel的?

      關(guān)鍵術(shù)語介紹

      為了方便開源庫的快速上手,我們先來了解 excel 中的幾個(gè)關(guān)鍵術(shù)語,如下圖所示,①為sheet,也就是表格中的頁簽;②為row,代表 excel 中的一行;③為cell,代表 excel 中的一個(gè)單元格。

      正常情況下,創(chuàng)建一個(gè)表格的基本流程是打開 wps 點(diǎn)擊新建,這時(shí)會(huì)默認(rèn)創(chuàng)建一個(gè) sheet,然后在該 sheet 中的第一行填寫表頭,接下來根據(jù)表頭逐行填充內(nèi)容,最后將文件另存為到硬盤的某個(gè)位置。這與 Golang 開源庫創(chuàng)建 excel 的流程基本相同,下面演示一個(gè)極簡(jiǎn)表格的創(chuàng)建。

      創(chuàng)建表格

      創(chuàng)建表格前需要先引入 excel 庫,我們以比較熱門的 tealeg/xlsx 庫為例。

      go get github.com/tealeg/xlsx
      

      首先創(chuàng)建一個(gè)空文件,拿到文件句柄。

      file := xlsx.NewFile()
      

      創(chuàng)建一個(gè)名為人員信息收集的 sheet。

      sheet, err := file.AddSheet("人員信息收集")
      if err != nil {
        panic(err.Error())
      }
      

      然后為該 sheet 創(chuàng)建一行,這行作為我們的表頭。

      row := sheet.AddRow()
      

      在該行中創(chuàng)建一個(gè)單元格。

      cell := row.AddCell()
      

      現(xiàn)在給單元格填充內(nèi)容,因?yàn)槭潜眍^,暫且叫姓名

      cell.Value = "姓名"
      

      如何創(chuàng)建第二個(gè)單元格呢?原理相同,此處 cell 變量已定義,再創(chuàng)建新單元格只需賦值即可。

      cell = row.AddCell()
      cell.Value = "性別"
      

      表頭已經(jīng)設(shè)置好了,可以開始創(chuàng)建第二行來填充內(nèi)容了,方式與上述無差別。

      row = sheet.AddRow()
      cell = row.AddCell()
      cell.Value = "張三"
      cell = row.AddCell()
      cell.Value = "男"
      

      表格設(shè)置完成后,將該文件保存,文件名可自定義。

      err = file.Save("demo.xlsx")
      if err != nil {
        panic(err.Error())
      }
      

      跑起來后,可以發(fā)現(xiàn)目錄中多了一個(gè) demo.xlsx 文件,打開預(yù)覽內(nèi)容如下,達(dá)到了預(yù)期效果。

      文件源碼

      package main
      
      import "github.com/tealeg/xlsx"
      
      func main() {
      	file := xlsx.NewFile()
      	sheet, err := file.AddSheet("人員信息收集")
      	if err != nil {
      		panic(err.Error())
      	}
      	row := sheet.AddRow()
      	cell := row.AddCell()
      	cell.Value = "姓名"
      	cell = row.AddCell()
      	cell.Value = "性別"
      
      	row = sheet.AddRow()
      	cell = row.AddCell()
      	cell.Value = "張三"
      	cell = row.AddCell()
      	cell.Value = "男"
      
      	err = file.Save("demo.xlsx")
      	if err != nil {
      		panic(err.Error())
      	}
      }
      

      讀取表格

      表格的讀取比創(chuàng)建簡(jiǎn)單很多,依然以上文創(chuàng)建的文件為例。

      output, err := xlsx.FileToSlice("demo.xlsx")
      if err != nil {
        panic(err.Error())
      }
      

      只需將文件路徑傳入上述方法,即可自動(dòng)讀取并返回一個(gè)三維切片,我們來讀取第一個(gè) sheet 的第二行中的第一個(gè)單元格。

      log.Println(output[0][1][1]) //Output: 男
      

      由此一來就非常容易遍歷了。

      for rowIndex, row := range output[0] {
        for cellIndex, cell := range row {
          log.Println(fmt.Sprintf("第%d行,第%d個(gè)單元格:%s", rowIndex+1, cellIndex+1, cell))
        }
      }
      
      2020/10/11 16:15:29 第1行,第1個(gè)單元格:姓名
      2020/10/11 16:15:29 第1行,第2個(gè)單元格:性別
      2020/10/11 16:15:29 第2行,第1個(gè)單元格:張三
      2020/10/11 16:15:29 第2行,第2個(gè)單元格:男
      

      文件源碼

      package main
      
      import (
      	"fmt"
      	"github.com/tealeg/xlsx"
      	"log"
      )
      
      func main() {
      	output, err := xlsx.FileToSlice("demo.xlsx")
      	if err != nil {
      		panic(err.Error())
      	}
      	log.Println(output[0][1][1])
      	for rowIndex, row := range output[0] {
      		for cellIndex, cell := range row {
      			log.Println(fmt.Sprintf("第%d行,第%d個(gè)單元格:%s", rowIndex+1, cellIndex+1, cell))
      		}
      	}
      }
      

      修改表格

      只是讀取表格內(nèi)容可能在特定場(chǎng)景下無法滿足需求,有時(shí)候需要對(duì)表格內(nèi)容進(jìn)行更改。

      file, err := xlsx.OpenFile("demo.xlsx")
      if err != nil {
        panic(err.Error())
      }
      

      修改表格之前依然需要先讀取文件,只是這次并沒有直接將其轉(zhuǎn)化為三維切片。拿到文件句柄后,可以直接修改某一行的內(nèi)容。

      file.Sheets[0].Rows[1].Cells[0].Value = "李四"
      

      上述代碼將第二行的張三改為了李四,但這還沒有結(jié)束,接下來需要將文件重新保存。

      err = file.Save("demo.xlsx")
      if err != nil {
        panic(err.Error())
      }
      

      打開文件預(yù)覽,可以看到已經(jīng)成功將張三改為了李四。

      文件源碼

      package main
      
      import "github.com/tealeg/xlsx"
      
      func main() {
      	file, err := xlsx.OpenFile("demo.xlsx")
      	if err != nil {
      		panic(err.Error())
      	}
      	file.Sheets[0].Rows[1].Cells[0].Value = "李四"
      	err = file.Save("demo.xlsx")
      	if err != nil {
      		panic(err.Error())
      	}
      }
      

      樣式設(shè)置

      該開源庫不僅支持內(nèi)容的編輯,還支持表格的樣式設(shè)置,樣式統(tǒng)一由結(jié)構(gòu)體 Style 來負(fù)責(zé)。

      type Style struct {
      	Border          Border
      	Fill            Fill
      	Font            Font
      	ApplyBorder     bool
      	ApplyFill       bool
      	ApplyFont       bool
      	ApplyAlignment  bool
      	Alignment       Alignment
      	NamedStyleIndex *int
      }
      

      拿上述生成的文件為例,假如我要將姓名所在單元格居中,首先要實(shí)例化樣式對(duì)象。

      style := xlsx.NewStyle()
      

      賦值居中屬性。

      style.Alignment = xlsx.Alignment{
        Horizontal:   "center",
        Vertical:     "center",
      }
      

      給第一行第一個(gè)單元格設(shè)置樣式。

      file.Sheets[0].Rows[0].Cells[0].SetStyle(style)
      

      與修改表格處理邏輯相同,最后保存文件。

      err = file.Save("demo.xlsx")
      if err != nil {
        panic(err.Error())
      }
      

      打開預(yù)覽,可以看到文字已經(jīng)上下左右居中。

      同理,可以修改文字顏色和背景,同樣通過 style 的屬性來設(shè)置。

      style.Font.Color = xlsx.RGB_Dark_Red
      style.Fill.BgColor = xlsx.RGB_Dark_Green
      

      其他還有很多屬性可以設(shè)置,比如合并單元格、字體、大小等等,大家可以自行測(cè)試。

      文件源碼

      package main
      
      import "github.com/tealeg/xlsx"
      
      func main() {
      	file, err := xlsx.OpenFile("demo.xlsx")
      	if err != nil {
      		panic(err.Error())
      	}
      	style := xlsx.NewStyle()
      	style.Font.Color = xlsx.RGB_Dark_Red
      	style.Fill.BgColor = xlsx.RGB_Dark_Green
      	style.Alignment = xlsx.Alignment{
      		Horizontal:   "center",
      		Vertical:     "center",
      	}
      	file.Sheets[0].Rows[0].Cells[0].SetStyle(style)
      	err = file.Save("demo.xlsx")
      	if err != nil {
      		panic(err.Error())
      	}
      }
      

      我是平也,這有一個(gè)專注Gopher技術(shù)成長(zhǎng)的開源項(xiàng)目「go home」


      感謝大家的觀看,如果覺得文章對(duì)你有所幫助,歡迎關(guān)注公眾號(hào)「平也」,聚焦Go語言與技術(shù)原理。
      關(guān)注我

      posted @ 2020-10-11 20:47  MARIOOW  閱讀(4400)  評(píng)論(1)    收藏  舉報(bào)
      主站蜘蛛池模板: 色欲综合久久中文字幕网| 亚洲人成网线在线播放VA| 久久成人国产精品免费软件| 最新的国产成人精品2020| 欧美老熟妇乱子伦牲交视频| 海晏县| 久久精品国产国产精品四凭| 日韩国产精品中文字幕| 文昌市| 久久美女夜夜骚骚免费视频| 色婷婷久久综合中文久久一本| 99视频在线精品国自产拍| 人妻少妇精品视频专区| 天堂va亚洲va欧美va国产| 99久久国产成人免费网站| 国产高清精品在线一区二区| 久久国产免费观看精品3| 国产极品美女高潮抽搐免费网站| 高清日韩一区二区三区视频| 久久精品国产免费观看频道| 日本一区二区中文字幕久久| 国产乱人偷精品人妻a片| 久久国产自偷自免费一区| 亚洲国产精品综合久久20| 无遮无挡爽爽免费视频| 亚洲人成亚洲人成在线观看| 中文字幕乱码人妻二区三区| 国产日韩av二区三区| 里番全彩爆乳女教师| 亚洲国产另类久久久精品小说| 亚洲中文欧美在线视频| 欧美极品色午夜在线视频| 欧美巨大极度另类| 自偷自拍亚洲综合精品| 挺进粗大尤物人妻中文字幕| av偷拍亚洲一区二区三区| 国产一区二区三区韩国| 成人综合人人爽一区二区| 日本va欧美va精品发布| 在线成人国产天堂精品av| 97久久综合亚洲色hezyo|