<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在很多管理系統下都有不少讓後端進行表格進行操作的業務需求,本期就帶大家瞭解一下Golang中如何使用模組引入的,以及講解怎麼快速的使用excelize庫,對錶格進行讀寫建立的。
我們在期望在vscode終端中也可以使用模組引入,它是 Go 1.11後新版模組管理方式。
go env -w GO111MODULE=auto
其 GO111MODULE
可以傳遞:
go.mod
檔案時,則開啟模組支援,否者無模組支援。然後,初始化這個專案,就會生成一個 go.mod
檔案。
go mod init excel-demo
go.mod
是Go 1.11版本引入的官方的包管理工具(之前為 gopath
來管理),它可以理解為前端開發中的 npm
的作用,主要是為了解決沒有記錄依賴包具體版本查閱困難的問題,也極大程度上方便了依賴包的管理。
excelize 是一個用於讀寫 Microsoft Excel™2007 及更高版本生成的電子試算表檔案(XLAM / XLSM / XLSX / XLTM / XLTX)的 Go 語言庫,而且更新維護頻繁且非常好用。
引入excelize
go get github.com/xuri/excelize/v2
這裡因為站點是國外的所以經常會因無法存取而超時。此時,不要慌,我們換一個國內的代理就好了。
go env -w GOPROXY=https://goproxy.cn
package main import ( "fmt" "github.com/xuri/excelize/v2" ) func createExcel(){ // 建立表格檔案 f := excelize.NewFile() // 在Sheet1設定A1項的值 f.SetCellValue("Sheet1", "A1", "這是Sheet1的A1項") // 建立新的Sheet,命名為Sheet2 selectIndex := f.NewSheet("Sheet2") // 在Sheet2設定B2項的值 f.SetCellValue("Sheet2", "B2", "這是Sheet2的B2項") // 切換到Sheet2 f.SetActiveSheet(selectIndex) // 儲存檔案 if err := f.SaveAs("test.xlsx"); err != nil { fmt.Println(err) } } func main() { // 執行建立表格 createExcel() }
按照以上是建立檔案並在列上隨便寫入一些資料然後儲存下來,非常的簡單,現在我們來執行一下,就會發現當前目錄會多出一個text.xlsx檔案,沒錯,這就是我們剛才生成出來的表格檔案,開啟它就可以看到我們剛才寫入的一些內容了。
func openExcel(){ // 讀取test.xlsx表格檔案 f, err := excelize.OpenFile("test.xlsx") if err != nil { fmt.Println(err) return } // 獲取Sheet2的B2項的值 cell, err := f.GetCellValue("Sheet2", "B2") if err != nil { fmt.Println(err) return } fmt.Println(cell) fmt.Println("---------------") // 獲取Sheet1所有的項 rows, err := f.GetRows("Sheet1") if err != nil { fmt.Println(err) return } // 遍歷Sheet1所有的項並列印出來 for _, row := range rows { for _, colCell := range row { fmt.Print(colCell, "t") } fmt.Println() } }
上面做的操作是把我們剛才儲存好的表格檔案的內容讀取出來,這裡分了兩種形式,一種是用 GetCellValue
方法讀取某個sheet的某一項,另一種是用 GetRows
對獲取整個sheet的項,然後for迴圈遍歷出來。
剛剛在建立的時候其實已經使用 SetCellValue
方法對錶格的寫入操作,但這還遠遠不夠,因為還有很多東西我們可以寫入進去,比如說圖表和圖片甚至是其他表格檔案。圖表這裡先簡單說明一下,它用了 AddChart
方法也是對某一項進行操作,插入相關資料進去,形式如下(詳見檔案):
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 }
接下來,我們主要講一下圖片是如何寫入進表格的,首先,我們先準備一張圖片,就放在assets目錄吧,然後在到 import
中匯入jpeg和png,目的是明確後面要解析的圖片(目前可以解析出jpeg,jpg,png格式的圖片了),如果不寫或者格式不對則會出現 image: unknown format
的提示。
package main import ( "fmt" _ "image/jpeg" _ "image/png" "github.com/xuri/excelize/v2" )
然後我們還是要讀取一下剛剛生成出來的test.xlsx表格檔案,再把圖片寫入進去。
func setPic(){ f, err := excelize.OpenFile("test.xlsx") if err != nil { fmt.Println(err) return } // 匯入並設定圖片 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) } }
而且圖片還可以這是位置,大小等引數,但這裡一定要記住不管新增了什麼最後一定要儲存一下,不然就是一場空。最後麼,一個小阿尼亞就寫入到了表格中啦~
本篇主要是帶大家簡單瞭解怎麼使用excelize庫對錶格進行操作,其實都還是皮毛,它的功能比你想的還要強大,詳細的可以看 官方檔案 ,算是一個非常實用的工具庫了,更多關於Go模組引入表格讀寫的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45