go語言操作excel
Go語言操作excel
簡介
本文講解如何使用Go語言操作excel,使用到的庫是github.com/360EntSecGroup-Skylar/excelize/v2,本文內(nèi)容包含
創(chuàng)建項(xiàng)目
創(chuàng)建excel文件
讀excel文件
chart操作
創(chuàng)建bar chart
創(chuàng)建col chart
創(chuàng)建line chart
創(chuàng)建pie chart
chart 相關(guān)參數(shù)
創(chuàng)建項(xiàng)目
# 新建一個(gè) excelDemo 文件夾 mkdir excelDemo cd excelDemo go mod init excelDemo # 創(chuàng)建main.go入口程序 touch main.go go get github.com/360EntSecGroup-Skylar/excelize/v2
創(chuàng)建excel文件
# 創(chuàng)建新建excel 文件dmeo的文件夾 mkdir create cd create touch main.go
編寫main.go代碼,如下:
package main import ( "fmt" "github.com/360EntSecGroup-Skylar/excelize/v2" ) func main() { fmt.Println("新建excel的例子") f := excelize.NewFile() index := f.NewSheet("新的sheet") // 單個(gè)配置cell的值. f.SetCellValue("新的sheet", "A2", "Hello world.") f.SetCellValue("新的sheet", "B2", 100) f.SetCellValue("新的sheet", "C2", 200) f.SetCellValue("新的sheet", "D1", "我來試試中文") // 借用 map類型批量的寫數(shù)據(jù) categories := map[string]string{ "B1": "年齡", "A2": "張三", "A3": "李四", "A4": "王五"} for k, v := range categories { f.SetCellValue("新的sheet", k, v) } // Set active sheet of the workbook. f.SetActiveSheet(index) // Save spreadsheet by the given path. if err := f.SaveAs("Book1.xlsx"); err != nil { fmt.Println(err) } }
執(zhí)行demo
go run main..go
執(zhí)行之后,會(huì)創(chuàng)建一個(gè)Book1.xlsxexcel文件,該文件內(nèi)容如下 :
回到項(xiàng)目根目錄cd ../
讀excel文件
# 創(chuàng)建新建excel 文件dmeo的文件夾 mkdir read cd read touch main.go
編寫main.go代碼,如下:
package main import ( "fmt" "github.com/360EntSecGroup-Skylar/excelize/v2" ) func main() { fmt.Println("讀excel的例子") f, err := excelize.OpenFile("read.xlsx") if err != nil { fmt.Println(err) return } fmt.Println("讀文件成功") // 從指定sheet以及指定一個(gè)cell里面獲取數(shù)據(jù) cell, err := f.GetCellValue("Sheet1", "B2") if err != nil { fmt.Println(err) return } fmt.Println(cell) // 獲取某個(gè)sheet的的所有行 rows, err := f.GetRows("Sheet1") if err != nil { fmt.Println(err) return } for _, row := range rows { for _, colCell := range row { fmt.Print(colCell, "\t") } //讀完一行換行 fmt.Println() } }
執(zhí)行demo
go run main.go
如果文件內(nèi)容如下
日志打印結(jié)果如下:
chart操作
接下來幾章會(huì)介紹如何在excel中利用數(shù)據(jù)顯示圖形,本文會(huì)介紹一些基本的圖形,如果讀者有更多需求,可參考Excelize的詳細(xì)文檔
創(chuàng)建bar chart
代碼
package main import ( "fmt" "github.com/360EntSecGroup-Skylar/excelize/v2" ) func main() { fmt.Println("寫圖的例子") categories := map[string]string{ "A2": "年齡", "B1": "張三", "C1": "李四", "D1": "王五"} values := map[string]int{ "B2": 5, "C2": 6, "D2": 5} f := excelize.NewFile() for k, v := range categories { f.SetCellValue("Sheet1", k, v) } for k, v := range values { f.SetCellValue("Sheet1", k, v) } // 支持的chart類型 https://github.com/360EntSecGroup-Skylar/excelize/blob/master/chart.go if err := f.AddChart("Sheet1", "E1", `{ "type": "bar", "series": [ { "name": "Sheet1!$A", "categories": "Sheet1!$B:$D", "values": "Sheet1!$B:$D" } ], "title": { "name": "Bar Chart" } }`); err != nil { fmt.Println(err) return } // Save spreadsheet by the given path. if err := f.SaveAs("圖例子bar.xlsx"); err != nil { fmt.Println(err) } }
執(zhí)行效果 go run main.go
創(chuàng)建col chart
代碼
package main import ( "fmt" "github.com/360EntSecGroup-Skylar/excelize/v2" ) func main() { fmt.Println("寫圖的例子") categories := map[string]string{ "A2": "年齡", "B1": "張三", "C1": "李四", "D1": "王五"} values := map[string]int{ "B2": 5, "C2": 6, "D2": 5} f := excelize.NewFile() for k, v := range categories { f.SetCellValue("Sheet1", k, v) } for k, v := range values { f.SetCellValue("Sheet1", k, v) } // 支持的chart類型 https://github.com/360EntSecGroup-Skylar/excelize/blob/master/chart.go if err := f.AddChart("Sheet1", "E1", `{ "type": "bar", "series": [ { "name": "Sheet1!$A", "categories": "Sheet1!$B:$D", "values": "Sheet1!$B:$D" } ], "title": { "name": "Bar Chart" } }`); err != nil { fmt.Println(err) return } // Save spreadsheet by the given path. if err := f.SaveAs("圖例子bar.xlsx"); err != nil { fmt.Println(err) } }
執(zhí)行效果
創(chuàng)建line chart
代碼
package main import ( "fmt" "github.com/360EntSecGroup-Skylar/excelize/v2" ) func main() { fmt.Println("寫圖的例子") categories := map[string]string{ "B1": "2018","C1": "2019","D1": "2020","E1": "2020", "A2": "張三", "A3": "李四", "A4": "王五"} values := map[string]int{ "B2": 107, "C2": 115, "D2": 120,"E2": 136, "B3": 110, "C3": 124, "D3": 140,"E3": 150, "B4": 115, "C4": 126, "D4": 132,"E4": 140, } f := excelize.NewFile() for k, v := range categories { f.SetCellValue("Sheet1", k, v) } for k, v := range values { f.SetCellValue("Sheet1", k, v) } // 支持的chart類型 https://github.com/360EntSecGroup-Skylar/excelize/blob/master/chart.go if err := f.AddChart("Sheet1", "F1", `{ "type": "line", "series": [ { "name": "Sheet1!$A", "categories": "Sheet1!$B:$E", "values": "Sheet1!$B:$E" }, { "name": "Sheet1!$A", "categories": "Sheet1!$B:$E", "values": "Sheet1!$B:$E" }, { "name": "Sheet1!$A", "categories": "Sheet1!$B:$E", "values": "Sheet1!$B:$E" } ], "title": { "name": "Line Chart" }, "plotarea": { "show_bubble_size": true, "show_cat_name": false, "show_leader_lines": false, "show_percent": true, "show_series_name": false, "show_val": true } }`); err != nil { fmt.Println(err) return } // Save spreadsheet by the given path. if err := f.SaveAs("圖例子line.xlsx"); err != nil { fmt.Println(err) } }
執(zhí)行效果:
創(chuàng)建pie chart
代碼
package main import ( "fmt" "github.com/360EntSecGroup-Skylar/excelize/v2" ) func main() { fmt.Println("寫圖的例子") categories := map[string]string{"A2": "營業(yè)額", "B1": "張三", "C1": "李四", "D1": "王五"} values := map[string]float32{"B2": 100, "C2": 130.5, "D2": 150} f := excelize.NewFile() for k, v := range categories { f.SetCellValue("Sheet1", k, v) } for k, v := range values { f.SetCellValue("Sheet1", k, v) } if err := f.AddChart("Sheet1", "E1", ` { "type": "pie", "series": [ { "name": "Sheet1!$A$2", "categories": "Sheet1!$B$1:$D$1", "values": "Sheet1!$B$2:$D$2" } ], "format": { "x_scale": 1.0, "y_scale": 1.0, "x_offset": 15, "y_offset": 10, "print_obj": true, "lock_aspect_ratio": false, "locked": false }, "legend": { "position": "bottom", "show_legend_key": false }, "title": { "name": "營業(yè)額" }, "plotarea": { "show_bubble_size": true, "show_cat_name": false, "show_leader_lines": false, "show_percent": true, "show_series_name": false, "show_val": true }, "show_blanks_as": "gap" } `); err != nil { fmt.Println(err) } // 保存工作簿 if err := f.SaveAs("Book1.xlsx"); err != nil { fmt.Println(err) } }
執(zhí)行效果
chart 相關(guān)參數(shù)
type:chart的類型 ,支持的圖表參考:https://www.bookstack.cn/read/excelize-2.2-zh/e83b0c83bed9634a.md
series : 數(shù)據(jù)信息集合
name: 序列名稱
categories: 分類軸標(biāo)簽
values: 圖表數(shù)據(jù)區(qū)域
line: 如果是折線圖有效
legend: 圖例設(shè)置方法
position: 圖例位置,top/buttom/left/right/top_right
show_legend_key: bool,是否顯示圖例,默認(rèn)flase
plotarea: 設(shè)置標(biāo)簽
show_bubble_size,bool 默認(rèn)flase,氣泡大小
show_cat_name,bool,默認(rèn)ture,類別名稱
show_leader_lines ,bool,默認(rèn)flase,顯示引導(dǎo)線
show_percent,bool,默認(rèn)flase,百分比
show_series_name,bool,默認(rèn)flase,系列名稱
show_val,bool,默認(rèn)flase,值
通過參數(shù) x_axis 和 y_axis 參數(shù)設(shè)置坐標(biāo)軸選項(xiàng)。
更多參考 https://www.bookstack.cn/read/excelize-2.2-zh/e83b0c83bed9634a.md
Go
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。