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

Golang操作excel的技巧與方法

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

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

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

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

創(chuàng)建表格

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

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è)置好了,可以開(kāi)始創(chuàng)建第二行來(lái)填充內(nèi)容了,方式與上述無(wú)差別。

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

跑起來(lái)后,可以發(fā)現(xiàn)目錄中多了一個(gè) demo.xlsx 文件,打開(kāi)預(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è)三維切片,我們來(lái)讀取第一個(gè) sheet 的第二行中的第一個(gè)單元格。

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

由此一來(lái)就非常容易遍歷了。

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)景下無(wú)法滿(mǎn)足需求,有時(shí)候需要對(duì)表格內(nèi)容進(jìn)行更改。

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

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

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

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

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

打開(kāi)文件預(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è)置

該開(kāi)源庫(kù)不僅支持內(nèi)容的編輯,還支持表格的樣式設(shè)置,樣式統(tǒng)一由結(jié)構(gòu)體 Style 來(lái)負(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())
}

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

同理,可以修改文字顏色和背景,同樣通過(guò) style 的屬性來(lái)設(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())
	}
}

以上就是Golang操作excel的技巧與方法的詳細(xì)內(nèi)容,更多關(guān)于Golang操作excel的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go 中的Map與字符處理指南

    Go 中的Map與字符處理指南

    在Go中,map可以存儲(chǔ)字符,但需要理解字符在Go中的表示方式,本文給大家介紹Go中的Map與字符處理指南,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-06-06
  • Gin框架使用panic處理中間件問(wèn)題詳解

    Gin框架使用panic處理中間件問(wèn)題詳解

    這篇文章主要介紹了Gin框架使用panic處理中間件問(wèn)題,在 Gin 框架中,錯(cuò)誤處理和 panic 處理是非常重要的功能。當(dāng)處理 HTTP 請(qǐng)求時(shí),可能會(huì)出現(xiàn)各種各樣的錯(cuò)誤,例如數(shù)據(jù)庫(kù)連接錯(cuò)誤、網(wǎng)絡(luò)錯(cuò)誤、權(quán)限問(wèn)題等等
    2023-04-04
  • Go語(yǔ)言fsnotify接口實(shí)現(xiàn)監(jiān)測(cè)文件修改

    Go語(yǔ)言fsnotify接口實(shí)現(xiàn)監(jiān)測(cè)文件修改

    這篇文章主要為大家介紹了Go語(yǔ)言fsnotify接口實(shí)現(xiàn)監(jiān)測(cè)文件修改的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go net/http/pprof分析內(nèi)存泄露及解決過(guò)程

    Go net/http/pprof分析內(nèi)存泄露及解決過(guò)程

    這篇文章主要介紹了Go net/http/pprof分析內(nèi)存泄露及解決過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Golang結(jié)構(gòu)化日志包log/slog的使用詳解

    Golang結(jié)構(gòu)化日志包log/slog的使用詳解

    官方提供的用于打印日志的包是標(biāo)準(zhǔn)庫(kù)中的 log 包,該包雖然被廣泛使用,但是缺點(diǎn)也很多,所以Go 1.21新增的 log/slog 完美解決了以上問(wèn)題,下面我們就來(lái)看看log/slog包的使用吧
    2023-09-09
  • go如何調(diào)用C動(dòng)態(tài)庫(kù)函數(shù)

    go如何調(diào)用C動(dòng)態(tài)庫(kù)函數(shù)

    這篇文章主要介紹了go如何調(diào)用C動(dòng)態(tài)庫(kù)函數(shù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Go語(yǔ)言TCP從原理到代碼實(shí)現(xiàn)詳解

    Go語(yǔ)言TCP從原理到代碼實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了Go語(yǔ)言TCP從原理到代碼實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go 內(nèi)存分配管理

    Go 內(nèi)存分配管理

    這篇文章主要介紹了Go 內(nèi)存分配管理,go 語(yǔ)言實(shí)際內(nèi)存、虛擬內(nèi)存怎么分配,延遲歸還是什么機(jī)制?本文結(jié)合監(jiān)控對(duì)內(nèi)存管理進(jìn)行了觀測(cè),深入學(xué)習(xí)golang對(duì)于內(nèi)存的管理機(jī)制,需要的朋友可以參考一下
    2022-02-02
  • 關(guān)于go語(yǔ)言編碼需要放到src 文件夾下的問(wèn)題

    關(guān)于go語(yǔ)言編碼需要放到src 文件夾下的問(wèn)題

    這篇文章主要介紹了go語(yǔ)言編碼需要放到src 文件夾下的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Go實(shí)現(xiàn)圖片上添加水印的示例代碼

    Go實(shí)現(xiàn)圖片上添加水印的示例代碼

    本文主要介紹了Go實(shí)現(xiàn)圖片上添加水印的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05

最新評(píng)論

玛纳斯县| 故城县| 巴青县| 德兴市| 晴隆县| 普兰县| 昌图县| 德保县| 蒙山县| 余庆县| 晋江市| 涟源市| 襄垣县| 武汉市| 泾源县| 思南县| 来宾市| 隆子县| 奈曼旗| 鹤山市| 什邡市| 乌鲁木齐县| 临颍县| 西昌市| 开远市| 昌吉市| 奎屯市| 天气| 吴桥县| 客服| 汾阳市| 天台县| 辽阳县| 高雄县| 桐乡市| 玛纳斯县| 宁乡县| 柘城县| 崇州市| 江源县| 达日县|