欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang操作excel的技巧與方法

 更新時間:2024年05月22日 09:28:37   作者:馬里嗷  
在Golang中操作Excel可以包括讀取、寫入和編輯Excel文件,你可以定義函數(shù)或方法來執(zhí)行這些操作,本文給大家介紹了Golang操作excel的技巧與方法,文中有詳細的代碼講解,需要的朋友可以參考下

關鍵術語介紹

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

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

創(chuàng)建表格

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

go get github.com/tealeg/xlsx

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

file := xlsx.NewFile()

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

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

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

row := sheet.AddRow()

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

cell := row.AddCell()

現(xiàn)在給單元格填充內容,因為是表頭,暫且叫姓名。

cell.Value = "姓名"

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

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

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

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

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

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

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

文件源碼

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)建簡單很多,依然以上文創(chuàng)建的文件為例。

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

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

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

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

for rowIndex, row := range output[0] {
  for cellIndex, cell := range row {
    log.Println(fmt.Sprintf("第%d行,第%d個單元格:%s", rowIndex+1, cellIndex+1, cell))
  }
}

2020/10/11 16:15:29 第1行,第1個單元格:姓名
2020/10/11 16:15:29 第1行,第2個單元格:性別
2020/10/11 16:15:29 第2行,第1個單元格:張三
2020/10/11 16:15:29 第2行,第2個單元格:男

文件源碼

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個單元格:%s", rowIndex+1, cellIndex+1, cell))
		}
	}
}

修改表格

只是讀取表格內容可能在特定場景下無法滿足需求,有時候需要對表格內容進行更改。

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())
}

打開文件預覽,可以看到已經(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())
	}
}

樣式設置

該開源庫不僅支持內容的編輯,還支持表格的樣式設置,樣式統(tǒng)一由結構體 Style 來負責。

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

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

style := xlsx.NewStyle()

賦值居中屬性。

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())
}

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

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

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

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

文件源碼

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())
	}
}

以上就是Golang操作excel的技巧與方法的詳細內容,更多關于Golang操作excel的資料請關注腳本之家其它相關文章!

相關文章

  • GO語言基本數(shù)據(jù)類型總結

    GO語言基本數(shù)據(jù)類型總結

    這篇文章主要介紹了GO語言基本數(shù)據(jù)類型,較為詳細的總結了GO語言的基本數(shù)據(jù)類型,對于GO語言的學習有一定的借鑒參考價值,需要的朋友可以參考下
    2014-12-12
  • GoFrame?gredis配置文件及配置方法對比

    GoFrame?gredis配置文件及配置方法對比

    這篇文章主要為大家介紹了GoFrame?gredis配置管理中,配置文件及配置方法對比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • go將request?body綁定到不同的結構體中教程

    go將request?body綁定到不同的結構體中教程

    這篇文章主要為大家介紹了go將request?body綁定到不同的結構體中教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 淺談Go切片的值修改是否會覆蓋數(shù)組的值?

    淺談Go切片的值修改是否會覆蓋數(shù)組的值?

    本文主要介紹了淺談Go切片的值修改是否會覆蓋數(shù)組的值,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下?
    2022-02-02
  • golang兩種調用rpc的方法

    golang兩種調用rpc的方法

    這篇文章主要介紹了golang兩種調用rpc的方法,結合實例形式分析了Go語言調用rpc的原理與實現(xiàn)方法,需要的朋友可以參考下
    2016-07-07
  • 詳解如何使用unsafe標準庫突破Golang中的類型限制

    詳解如何使用unsafe標準庫突破Golang中的類型限制

    在使用c語言編程時,常常因為類型的問題大傷腦筋,而,golang提供了一些方式用于喜歡hack的用戶,下面我們就來講講如何使用unsafe標準庫突破Golang中的類型限制吧
    2024-03-03
  • Go語言流程控制語句

    Go語言流程控制語句

    這篇文章介紹了Go語言流程控制語句的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Go標準庫http與fasthttp服務端性能對比場景分析

    Go標準庫http與fasthttp服務端性能對比場景分析

    這篇文章主要介紹了Go標準庫http與fasthttp服務端性能比較,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • GO 語言運行環(huán)境的基礎知識

    GO 語言運行環(huán)境的基礎知識

    這篇文章主要介紹了GO 語言運行環(huán)境的基礎知識的相關資料,需要的朋友可以參考下
    2022-09-09
  • Go泛型的理解和使用小結

    Go泛型的理解和使用小結

    泛型是一種非常強大的編程技術,可以提高代碼的復用性和可讀性,通過泛型容器和類型參數(shù)化,Go語言中的泛型可以實現(xiàn)更加靈活和通用的編程,提高代碼的復用性和可維護性,本文給大家介紹Go泛型的理解和使用,感興趣的朋友一起看看吧
    2023-12-12

最新評論