Golang 模塊引入及表格讀寫業(yè)務(wù)快速實(shí)現(xiàn)示例
介紹
在很多管理系統(tǒng)下都有不少讓后端進(jìn)行表格進(jìn)行操作的業(yè)務(wù)需求,本期就帶大家了解一下Golang中如何使用模塊引入的,以及講解怎么快速的使用excelize庫(kù),對(duì)表格進(jìn)行讀寫創(chuàng)建的。
正文
配置模塊引入環(huán)境
我們?cè)谄谕趘scode終端中也可以使用模塊引入,它是 Go 1.11后新版模塊管理方式。
go env -w GO111MODULE=auto
其 GO111MODULE 可以傳遞:
- auto:在其外層且根目錄里有
go.mod文件時(shí),則開(kāi)啟模塊支持,否者無(wú)模塊支持。 - on:開(kāi)啟模塊支持。
- off:無(wú)模塊支持。
然后,初始化這個(gè)項(xiàng)目,就會(huì)生成一個(gè) go.mod 文件。
go mod init excel-demo
go.mod 是Go 1.11版本引入的官方的包管理工具(之前為 gopath 來(lái)管理),它可以理解為前端開(kāi)發(fā)中的 npm 的作用,主要是為了解決沒(méi)有記錄依賴包具體版本查閱困難的問(wèn)題,也極大程度上方便了依賴包的管理。
引入excelize庫(kù)
excelize 是一個(gè)用于讀寫 Microsoft Excel™2007 及更高版本生成的電子表格文檔(XLAM / XLSM / XLSX / XLTM / XLTX)的 Go 語(yǔ)言庫(kù),而且更新維護(hù)頻繁且非常好用。
引入excelize
go get github.com/xuri/excelize/v2
這里因?yàn)檎军c(diǎn)是國(guó)外的所以經(jīng)常會(huì)因無(wú)法訪問(wèn)而超時(shí)。此時(shí),不要慌,我們換一個(gè)國(guó)內(nèi)的代理就好了。
go env -w GOPROXY=https://goproxy.cn
創(chuàng)建表格
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func createExcel(){
// 創(chuàng)建表格文件
f := excelize.NewFile()
// 在Sheet1設(shè)置A1項(xiàng)的值
f.SetCellValue("Sheet1", "A1", "這是Sheet1的A1項(xiàng)")
// 創(chuàng)建新的Sheet,命名為Sheet2
selectIndex := f.NewSheet("Sheet2")
// 在Sheet2設(shè)置B2項(xiàng)的值
f.SetCellValue("Sheet2", "B2", "這是Sheet2的B2項(xiàng)")
// 切換到Sheet2
f.SetActiveSheet(selectIndex)
// 保存文件
if err := f.SaveAs("test.xlsx"); err != nil {
fmt.Println(err)
}
}
func main() {
// 執(zhí)行創(chuàng)建表格
createExcel()
}
按照以上是創(chuàng)建文件并在列上隨便寫入一些數(shù)據(jù)然后保存下來(lái),非常的簡(jiǎn)單,現(xiàn)在我們來(lái)執(zhí)行一下,就會(huì)發(fā)現(xiàn)當(dāng)前目錄會(huì)多出一個(gè)text.xlsx文件,沒(méi)錯(cuò),這就是我們剛才生成出來(lái)的表格文件,打開(kāi)它就可以看到我們剛才寫入的一些內(nèi)容了。

讀取表格
func openExcel(){
// 讀取test.xlsx表格文件
f, err := excelize.OpenFile("test.xlsx")
if err != nil {
fmt.Println(err)
return
}
// 獲取Sheet2的B2項(xiàng)的值
cell, err := f.GetCellValue("Sheet2", "B2")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(cell)
fmt.Println("---------------")
// 獲取Sheet1所有的項(xiàng)
rows, err := f.GetRows("Sheet1")
if err != nil {
fmt.Println(err)
return
}
// 遍歷Sheet1所有的項(xiàng)并打印出來(lái)
for _, row := range rows {
for _, colCell := range row {
fmt.Print(colCell, "\t")
}
fmt.Println()
}
}
上面做的操作是把我們剛才保存好的表格文件的內(nèi)容讀取出來(lái),這里分了兩種形式,一種是用 GetCellValue 方法讀取某個(gè)sheet的某一項(xiàng),另一種是用 GetRows 對(duì)獲取整個(gè)sheet的項(xiàng),然后for循環(huán)遍歷出來(lái)。

寫入表格
剛剛在創(chuàng)建的時(shí)候其實(shí)已經(jīng)使用 SetCellValue 方法對(duì)表格的寫入操作,但這還遠(yuǎn)遠(yuǎn)不夠,因?yàn)檫€有很多東西我們可以寫入進(jìn)去,比如說(shuō)圖表和圖片甚至是其他表格文件。圖表這里先簡(jiǎn)單說(shuō)明一下,它用了 AddChart 方法也是對(duì)某一項(xiàng)進(jìn)行操作,插入相關(guān)數(shù)據(jù)進(jìn)去,形式如下(詳見(jiàn)文檔):
if err := f.AddChart("Sheet1", "E1", `{
"type": "col3DClustered",
"series": [
{
"name": "Sheet1!$A$2",
"categories": "Sheet1!$B$1:$D$1",
"values": "Sheet1!$B$2:$D$2"
}]
}`); err != nil {
fmt.Println(err)
return
}
接下來(lái),我們主要講一下圖片是如何寫入進(jìn)表格的,首先,我們先準(zhǔn)備一張圖片,就放在assets目錄吧,然后在到 import 中導(dǎo)入jpeg和png,目的是明確后面要解析的圖片(目前可以解析出jpeg,jpg,png格式的圖片了),如果不寫或者格式不對(duì)則會(huì)出現(xiàn) image: unknown format 的提示。
package main
import (
"fmt"
_ "image/jpeg"
_ "image/png"
"github.com/xuri/excelize/v2"
)
然后我們還是要讀取一下剛剛生成出來(lái)的test.xlsx表格文件,再把圖片寫入進(jìn)去。
func setPic(){
f, err := excelize.OpenFile("test.xlsx")
if err != nil {
fmt.Println(err)
return
}
// 導(dǎo)入并設(shè)置圖片
if err := f.AddPicture("Sheet2", "C3", "assets/anya.png",
`{
"x_offset": 10,
"y_offset": 10,
"x_scale": 0.8,
"y_scale": 0.8
}`); err != nil {
fmt.Println(err)
}
// 保存剛才的操作
if err = f.Save(); err != nil {
fmt.Println(err)
}
}
而且圖片還可以這是位置,大小等參數(shù),但這里一定要記住不管添加了什么最后一定要保存一下,不然就是一場(chǎng)空。最后么,一個(gè)小阿尼亞就寫入到了表格中啦~

結(jié)語(yǔ)
本篇主要是帶大家簡(jiǎn)單了解怎么使用excelize庫(kù)對(duì)表格進(jìn)行操作,其實(shí)都還是皮毛,它的功能比你想的還要強(qiáng)大,詳細(xì)的可以看 官方文檔 ,算是一個(gè)非常實(shí)用的工具庫(kù)了,更多關(guān)于Go模塊引入表格讀寫的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
go?REST?API設(shè)計(jì)模式和反模式示例解析
在這篇文章中,我們將探討一些常見(jiàn)的REST?API設(shè)計(jì)模式和開(kāi)發(fā)者應(yīng)該注意的反模式,我們還將提供Golang和Open?API?Schema的代碼片段來(lái)幫助說(shuō)明這些概念,有需要的朋友可以借鑒參考下2023-09-09
Go語(yǔ)言使用Cobra實(shí)現(xiàn)強(qiáng)大命令行應(yīng)用
Cobra是一個(gè)強(qiáng)大的開(kāi)源工具,能夠幫助我們快速構(gòu)建出優(yōu)雅且功能豐富的命令行應(yīng)用,本文為大家介紹了如何使用Cobra打造強(qiáng)大命令行應(yīng)用,感興趣的小伙伴可以了解一下2023-07-07
基于HLS創(chuàng)建Golang視頻流服務(wù)器的優(yōu)缺點(diǎn)
HLS 是 HTTP Live Streaming 的縮寫,是蘋果開(kāi)發(fā)的一種基于 HTTP 的自適應(yīng)比特率流媒體傳輸協(xié)議。這篇文章主要介紹了基于 HLS 創(chuàng)建 Golang 視頻流服務(wù)器,需要的朋友可以參考下2021-08-08
Golang調(diào)用FFmpeg轉(zhuǎn)換視頻流的實(shí)現(xiàn)
本文主要介紹了Golang調(diào)用FFmpeg轉(zhuǎn)換視頻流,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Golang利用casbin實(shí)現(xiàn)權(quán)限驗(yàn)證詳解
Casbin是一個(gè)強(qiáng)大的、高效的開(kāi)源訪問(wèn)控制框架,其權(quán)限管理機(jī)制支持多種訪問(wèn)控制模型,Casbin只負(fù)責(zé)訪問(wèn)控制。本文將利用casbin實(shí)現(xiàn)權(quán)限驗(yàn)證功能,需要的可以參考一下2023-02-02
使用Go語(yǔ)言實(shí)現(xiàn)并發(fā)處理CSV文件到數(shù)據(jù)庫(kù)
Go?語(yǔ)言的?goroutine?和通道(channel)非常適合用來(lái)并發(fā)地處理數(shù)據(jù),本文將通過(guò)簡(jiǎn)單示例介紹一下如何使用Go語(yǔ)言并發(fā)地處理?CSV?文件并將數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中,感興趣的可以了解下2025-01-01
Go語(yǔ)言實(shí)現(xiàn)ssh&scp的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Go語(yǔ)言實(shí)現(xiàn)ssh&scp,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下2022-10-10

