Golang 模塊引入及表格讀寫業(yè)務(wù)快速實(shí)現(xiàn)示例
介紹
在很多管理系統(tǒng)下都有不少讓后端進(jìn)行表格進(jìn)行操作的業(yè)務(wù)需求,本期就帶大家了解一下Golang中如何使用模塊引入的,以及講解怎么快速的使用excelize庫,對(duì)表格進(jìn)行讀寫創(chuàng)建的。
正文
配置模塊引入環(huán)境
我們?cè)谄谕趘scode終端中也可以使用模塊引入,它是 Go 1.11后新版模塊管理方式。
go env -w GO111MODULE=auto
其 GO111MODULE
可以傳遞:
- auto:在其外層且根目錄里有
go.mod
文件時(shí),則開啟模塊支持,否者無模塊支持。 - on:開啟模塊支持。
- off:無模塊支持。
然后,初始化這個(gè)項(xiàng)目,就會(huì)生成一個(gè) go.mod
文件。
go mod init excel-demo
go.mod
是Go 1.11版本引入的官方的包管理工具(之前為 gopath
來管理),它可以理解為前端開發(fā)中的 npm
的作用,主要是為了解決沒有記錄依賴包具體版本查閱困難的問題,也極大程度上方便了依賴包的管理。
引入excelize庫
excelize 是一個(gè)用于讀寫 Microsoft Excel™2007 及更高版本生成的電子表格文檔(XLAM / XLSM / XLSX / XLTM / XLTX)的 Go 語言庫,而且更新維護(hù)頻繁且非常好用。
引入excelize
go get github.com/xuri/excelize/v2
這里因?yàn)檎军c(diǎn)是國外的所以經(jīng)常會(huì)因無法訪問而超時(shí)。此時(shí),不要慌,我們換一個(gè)國內(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ù)然后保存下來,非常的簡單,現(xiàn)在我們來執(zhí)行一下,就會(huì)發(fā)現(xiàn)當(dāng)前目錄會(huì)多出一個(gè)text.xlsx文件,沒錯(cuò),這就是我們剛才生成出來的表格文件,打開它就可以看到我們剛才寫入的一些內(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)并打印出來 for _, row := range rows { for _, colCell := range row { fmt.Print(colCell, "\t") } fmt.Println() } }
上面做的操作是把我們剛才保存好的表格文件的內(nèi)容讀取出來,這里分了兩種形式,一種是用 GetCellValue
方法讀取某個(gè)sheet的某一項(xiàng),另一種是用 GetRows
對(duì)獲取整個(gè)sheet的項(xiàng),然后for循環(huán)遍歷出來。
寫入表格
剛剛在創(chuàng)建的時(shí)候其實(shí)已經(jīng)使用 SetCellValue
方法對(duì)表格的寫入操作,但這還遠(yuǎn)遠(yuǎn)不夠,因?yàn)檫€有很多東西我們可以寫入進(jìn)去,比如說圖表和圖片甚至是其他表格文件。圖表這里先簡單說明一下,它用了 AddChart
方法也是對(duì)某一項(xiàng)進(jìn)行操作,插入相關(guān)數(shù)據(jù)進(jì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 }
接下來,我們主要講一下圖片是如何寫入進(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" )
然后我們還是要讀取一下剛剛生成出來的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é)語
本篇主要是帶大家簡單了解怎么使用excelize庫對(duì)表格進(jìn)行操作,其實(shí)都還是皮毛,它的功能比你想的還要強(qiáng)大,詳細(xì)的可以看 官方文檔 ,算是一個(gè)非常實(shí)用的工具庫了,更多關(guān)于Go模塊引入表格讀寫的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Golang Printf,Sprintf,Fprintf 格式化詳解
這篇文章主要介紹了Golang Printf,Sprintf,Fprintf 格式化詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03使用Go?goroutine實(shí)現(xiàn)并發(fā)的Clock服務(wù)
這篇文章主要為大家詳細(xì)介紹了如何使用Go?goroutine實(shí)現(xiàn)并發(fā)的Clock服務(wù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06Golang之casbin權(quán)限管理的實(shí)現(xiàn)
這篇文章主要介紹了Golang之casbin權(quán)限管理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10深入理解Golang中的dig包管理和解決依賴關(guān)系
這篇文章主要為大家詳細(xì)介紹了golang中dig包的使用方法,探討其應(yīng)用場(chǎng)景,并提供一些示例,展示如何結(jié)合其他庫來更好地實(shí)現(xiàn)這些場(chǎng)景,感興趣的小伙伴可以了解下2024-01-01深入string理解Golang是怎樣實(shí)現(xiàn)的
這篇文章主要為大家介紹了深入string理解Golang是怎樣實(shí)現(xiàn)的原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Go語言題解LeetCode1260二維網(wǎng)格遷移示例詳解
這篇文章主要為大家介紹了Go語言題解LeetCode1260二維網(wǎng)格遷移示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Go語言實(shí)現(xiàn)lru淘汰策略和超時(shí)過期
緩存的大小是有限的,當(dāng)添加數(shù)據(jù)發(fā)現(xiàn)剩余緩存不夠時(shí),需要淘汰緩存中的部分?jǐn)?shù)據(jù),本文主要介紹了Go語言實(shí)現(xiàn)lru淘汰策略和超時(shí)過期,感興趣的可以了解一下2024-02-02