網站首頁 編程語言 正文
介紹
在很多管理系統下都有不少讓后端進行表格進行操作的業務需求,本期就帶大家了解一下Golang中如何使用模塊引入的,以及講解怎么快速的使用excelize庫,對表格進行讀寫創建的。
正文
配置模塊引入環境
我們在期望在vscode終端中也可以使用模塊引入,它是 Go 1.11后新版模塊管理方式。
go env -w GO111MODULE=auto
其 GO111MODULE
可以傳遞:
- auto:在其外層且根目錄里有
go.mod
文件時,則開啟模塊支持,否者無模塊支持。 - on:開啟模塊支持。
- off:無模塊支持。
然后,初始化這個項目,就會生成一個 go.mod
文件。
go mod init excel-demo
go.mod
是Go 1.11版本引入的官方的包管理工具(之前為 gopath
來管理),它可以理解為前端開發中的 npm
的作用,主要是為了解決沒有記錄依賴包具體版本查閱困難的問題,也極大程度上方便了依賴包的管理。
引入excelize庫
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) } }
而且圖片還可以這是位置,大小等參數,但這里一定要記住不管添加了什么最后一定要保存一下,不然就是一場空。最后么,一個小阿尼亞就寫入到了表格中啦~
結語
原文鏈接:https://juejin.cn/post/7123120168167243790
相關推薦
- 2022-04-26 C++?Primer?Plus詳解_C 語言
- 2022-06-06 淺談Redis?中的過期刪除策略和內存淘汰機制_Redis
- 2022-04-01 本地存儲(Local Storage) 和 會話存儲(Session Storage)
- 2022-03-07 axios和ajax的區別點總結_AJAX相關
- 2023-12-18 Jedis和springboot集成redis
- 2022-12-01 docker-compose簡單使用方法詳解_docker
- 2023-04-14 python使用pyodbc連接sqlserver_python
- 2023-12-11 Mybatis結果集映射ResultMap
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支