大家好,我是渔夫子。本号新推出「go工具箱」系列,意在给大家分享使用go语言编写的、实用的、好玩的工具。
在做web开发时,大家一定开发过数据导出的功能。数据导出一般就是导出excel和csv格式。今天就给大家介绍一款使用go语言开发的excel的操作工作:Excelize。该工具还是咱国内的一家做网络安全的公司开发。
该工具包提供了一组操作excel的API接口,除了最基本的excel的读写功能外,还支持绘制各种图表、添加图片、数据透视表的功能。
实现原理分析:office 办公软件的底层数据是以xml格式组织的,其遵守openxmlformats协议。该工具就是实现了openxmlformats定义的协议而实现
下面我们一起看下如何安装和使用。
使用go get安装该包:
go get github.com/xuri/excelize/v2创建电子表格操作:
package mainimport ("fmt""github.com/xuri/excelize/v2")func main() {f := excelize.NewFile()// Create a new sheet.index := f.NewSheet("Sheet2")// Set value of a cell.f.SetCellValue("Sheet2", "A2", "Hello world.")f.SetCellValue("Sheet1", "B2", 100)// 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)}}
读取电子表格中的内容操作:
package mainimport ("fmt""github.com/xuri/excelize/v2")func main() {f, err := excelize.OpenFile("Book1.xlsx")if err != nil {fmt.Println(err)return}defer func() {// Close the spreadsheet.if err := f.Close(); err != nil {fmt.Println(err)}}()// Get value from cell by given worksheet name and axis.cell, err := f.GetCellValue("Sheet1", "B2")if err != nil {fmt.Println(err)return}fmt.Println(cell)// Get all the rows in the Sheet1.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()}}
在电子表格中添加图表:
package mainimport ("fmt""github.com/xuri/excelize/v2")func main() {categories := map[string]string{"A2": "Small", "A3": "Normal", "A4": "Large","B1": "Apple", "C1": "Orange", "D1": "Pear"}values := map[string]int{"B2": 2, "C2": 3, "D2": 3, "B3": 5, "C3": 2, "D3": 4, "B4": 6, "C4": 7, "D4": 8}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": "col3DClustered","series": [{"name": "Sheet1!$A$2","categories": "Sheet1!$B$1:$D$1","values": "Sheet1!$B$2:$D$2"},{"name": "Sheet1!$A$3","categories": "Sheet1!$B$1:$D$1","values": "Sheet1!$B$3:$D$3"},{"name": "Sheet1!$A$4","categories": "Sheet1!$B$1:$D$1","values": "Sheet1!$B$4:$D$4"}],"title":{"name": "Fruit 3D Clustered Column Chart"}}`); err != nil {fmt.Println(err)return}// Save spreadsheet by the given path.if err := f.SaveAs("Book1.xlsx"); err != nil {fmt.Println(err)}}
添加图片操作:
package mainimport ("fmt"_ "image/gif"_ "image/jpeg"_ "image/png""github.com/xuri/excelize/v2")func main() {f, err := excelize.OpenFile("Book1.xlsx")if err != nil {fmt.Println(err)return}defer func() {// Close the spreadsheet.if err := f.Close(); err != nil {fmt.Println(err)}}()// Insert a picture.if err := f.AddPicture("Sheet1", "A2", "image.png", ""); err != nil {fmt.Println(err)}// Insert a picture to worksheet with scaling.if err := f.AddPicture("Sheet1", "D2", "image.jpg",`{"x_scale": 0.5, "y_scale": 0.5}`); err != nil {fmt.Println(err)}// Insert a picture offset in the cell with printing support.if err := f.AddPicture("Sheet1", "H2", "image.gif", `{"x_offset": 15,"y_offset": 10,"print_obj": true,"lock_aspect_ratio": false,"locked": false}`); err != nil {fmt.Println(err)}// Save the spreadsheet with the origin path.if err = f.Save(); err != nil {fmt.Println(err)}}
更多项目详情请查看如下链接。
开源项目地址:https://github.com/qax-os/excelize
开源项目作者:QI-ANXIN GROUP
---特别推荐---
特别推荐:一个专注go项目实战、项目中踩坑经验及避坑指南、各种好玩的go工具的公众号,「Go学堂」,专注实用性,非常值得大家关注。点击下方公众号卡片,直接关注。关注送《100个go常见的错误》pdf文档。