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

Golang操作excel的方法

 更新時間:2020年10月12日 09:11:47   作者:平也的技術(shù)博  
這篇文章主要介紹了Golang操作excel的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

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

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

正常情況下,創(chuàng)建一個表格的基本流程是打開 wps 點擊新建,這時會默認(rèn)創(chuàng)建一個 sheet,然后在該 sheet 中的第一行填寫表頭,接下來根據(jù)表頭逐行填充內(nèi)容,最后將文件另存為到硬盤的某個位置。這與 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)在給單元格填充內(nèi)容,因為是表頭,暫且叫姓名

cell.Value = "姓名"

如何創(chuàng)建第二個單元格呢?原理相同,此處 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)目錄中多了一個 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)建簡單很多,依然以上文創(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))
		}
	}
}

 

修改表格

只是讀取表格內(nèi)容可能在特定場景下無法滿足需求,有時候需要對表格內(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
}

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

style := xlsx.NewStyle()

賦值居中屬性。

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

給第一行第一個單元格設(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è)置,比如合并單元格、字體、大小等等,大家可以自行測試。

文件源碼

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

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

到此這篇關(guān)于Golang操作excel的方法的文章就介紹到這了,更多相關(guān)Golang操作excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go字典使用詳解

    Go字典使用詳解

    今天和大家一起學(xué)習(xí)Go語言的字典。Go語言的字典又稱為map,一種使用廣泛的數(shù)據(jù)結(jié)構(gòu)。它是擁有key/value對元素的「無序集合」,而且在集合中key必須是唯一的
    2022-11-11
  • Golang中實現(xiàn)數(shù)據(jù)脫敏處理的go-mask包分享

    Golang中實現(xiàn)數(shù)據(jù)脫敏處理的go-mask包分享

    這篇文章主要是來和大家分享一個在輸出中對敏感數(shù)據(jù)進(jìn)行脫敏的工作包:go-mask,可以將敏感信息輸出的時候替換成星號或其他字符,感興趣的小編可以跟隨小編一起了解下
    2023-05-05
  • Golang的引用類型和指針的使用與區(qū)別

    Golang的引用類型和指針的使用與區(qū)別

    本文詳細(xì)介紹了Golang中的引用類型和指針的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • Go基于GORM 獲取當(dāng)前請求所執(zhí)行的 SQL 信息(思路詳解)

    Go基于GORM 獲取當(dāng)前請求所執(zhí)行的 SQL 信息(思路詳解)

    這篇文章主要介紹了Go基于GORM 獲取當(dāng)前請求所執(zhí)行的 SQL 信息(思路詳解),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • GoLang中的timer定時器實現(xiàn)原理分析

    GoLang中的timer定時器實現(xiàn)原理分析

    Timer中對外暴露的只有一個channel,這個 channel也是定時器的核心。當(dāng)計時結(jié)束時,Timer會發(fā)送值到channel中,外部環(huán)境在這個 channel 收到值的時候,就代表計時器超時了,可與select搭配執(zhí)行一些超時邏輯
    2023-02-02
  • Go底層channel實現(xiàn)原理及示例詳解

    Go底層channel實現(xiàn)原理及示例詳解

    這篇文章主要介紹了Go底層channel實現(xiàn)原理及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go語言學(xué)習(xí)網(wǎng)絡(luò)編程與Http教程示例

    Go語言學(xué)習(xí)網(wǎng)絡(luò)編程與Http教程示例

    這篇文章主要為大家介紹了Go語言學(xué)習(xí)網(wǎng)絡(luò)編程與Http教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • golang jsoniter extension 處理動態(tài)字段的實現(xiàn)方法

    golang jsoniter extension 處理動態(tài)字段的實現(xiàn)方法

    這篇文章主要介紹了golang jsoniter extension 處理動態(tài)字段的實現(xiàn)方法,我們使用實例級別的 extension, 而非全局,可以針對不同業(yè)務(wù)邏輯有所區(qū)分,jsoniter 包提供了比較完善的定制能力,通過例子可以感受一下擴(kuò)展性,需要的朋友可以參考下
    2023-04-04
  • go內(nèi)存緩存BigCache使用入門詳解

    go內(nèi)存緩存BigCache使用入門詳解

    這篇文章主要為大家介紹了go內(nèi)存緩存BigCache使用入門詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 使用golang如何優(yōu)雅的關(guān)機(jī)或重啟操作示例

    使用golang如何優(yōu)雅的關(guān)機(jī)或重啟操作示例

    這篇文章主要為大家介紹了使用golang如何優(yōu)雅的關(guān)機(jī)或重啟操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04

最新評論

柳州市| 萝北县| 临沂市| 岗巴县| 河北省| 龙门县| 达拉特旗| 土默特右旗| 青冈县| 张家界市| 乌什县| 建宁县| 许昌县| 江北区| 正阳县| 青川县| 渝北区| 如东县| 辉南县| 和龙市| 绥芬河市| 花莲县| 抚州市| 遂昌县| 准格尔旗| 扶绥县| 洛隆县| 凌云县| 金门县| 公主岭市| 曲麻莱县| 海淀区| 延长县| 宜城市| 灵丘县| 梁河县| 从化市| 永寿县| 长垣县| 玉屏| 海南省|