「Go工具箱」重磅推荐:一个国产的,star高达12k+的操作excel的包:Excelize
2023-06-13 09:16:47 时间
大家好,我是渔夫子。本号新推出「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 main
import (
"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 main
import (
"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 main
import (
"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 main
import (
"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文档。
相关文章
- GO Excel 转 JSON (完整代码)[通俗易懂]
- Golang缓存库 go-cache
- 从Go log库到Zap,怎么打造出好用又实用的Logger
- Go 函数式编程篇(四):通过高阶函数实现装饰器模式
- Go版本大于1.13,程序里这样做错误处理才地道
- Go 介绍与常见数据类型
- 「Go工具箱」go语言csrf库的使用方式和实现原理
- 从 Java 的角度实践 Go 工程| 青训营笔记
- Go 模块 verifying xxx/go.mod: checksum mismatch 问题处理
- Excelize 发布 2.7.1 版本,Go 语言 Excel 文档基础库
- Go-RESTful-创建RESTful API服务(二)
- Go语言圣经-命令行参数详解编程语言
- 使用Go语言来操作Oracle数据库(go语言oracle)
- go语言变量作用域详解编程语言
- 快速完成:从Excel导入Oracle数据库(excel导入oracle数据库)
- 轻松操作:oracle快速导入Excel数据(oracle导入excel数据)
- 部署Linux下快速部署Go环境(go环境linux)
- 语言结合SQL Server,Go谱写新篇章(sqlserver的go)
- 部署Go语言快速连接Oracle实现轻松部署(go连接oracle简单)
- 一步一步学习Go读取Oracle数据库(go读取oracle)
- c去吧迁移到 Oracle 12c(go oracle 12)
- Go语句让Oracle数据库管理更方便(oracle go语句)
- GO语言基本类型分析