首頁 > 軟體

Golang 模組引入及表格讀寫業務快速實現範例

2022-07-25 18:02:29

介紹

在很多管理系統下都有不少讓後端進行表格進行操作的業務需求,本期就帶大家瞭解一下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)
    }
}

而且圖片還可以這是位置,大小等引數,但這裡一定要記住不管新增了什麼最後一定要儲存一下,不然就是一場空。最後麼,一個小阿尼亞就寫入到了表格中啦~

結語

本篇主要是帶大家簡單瞭解怎麼使用excelize庫對錶格進行操作,其實都還是皮毛,它的功能比你想的還要強大,詳細的可以看 官方檔案 ,算是一個非常實用的工具庫了,更多關於Go模組引入表格讀寫的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com