Excelize是一个用于读写XLSX文件的Go语言库,由Microsoft Excel 2007及更高版本生成。它支持在不丢失原有图表的情况下保存文件。要使用此库,Go版本需要1.10或更高。完整的API文档可以通过Go的内置文档工具查看,或者在线访问godoc.org和docs reference。
GitHub仓库地址:
文档地址:
在Go语言环境中,可以通过以下命令安装Excelize库:
go get github.com/360EntSecGroup-Skylar/excelize
以下是一个创建XLSX文件的简单示例:
package main
import (
"github.com/360EntSecGroup-Skylar/excelize"
)
func main() {
f := excelize.NewFile()
// 创建一个新的工作表
index := f.NewSheet("Sheet2")
// 设置单元格的值
f.SetCellValue("Sheet2", "A2", "Hello world.")
f.SetCellValue("Sheet1", "B2", 100)
// 设置工作簿的激活工作表
f.SetActiveSheet(index)
// 保存xlsx文件到指定路径
if err := f.SaveAs("Book1.xlsx"); err != nil {
println(err.Error())
}
}
以下是读取XLSX文档的示例:
package main
import (
"github.com/360EntSecGroup-Skylar/excelize"
)
func main() {
f, err := excelize.OpenFile("Book1.xlsx")
if err != nil {
println(err.Error())
return
}
// 通过给定的工作表名称和坐标获取单元格的值
cell, err := f.GetCellValue("Sheet1", "B2")
if err != nil {
println(err.Error())
return
}
println(cell)
// 获取Sheet1中的所有行
rows, err := f.GetRows("Sheet1")
for _, row := range rows {
for _, colCell := range row {
print(colCell, "\t")
}
println()
}
}
使用Excelize,生成和管理图表就像几行代码一样简单。可以基于工作表中的数据构建图表,或者在没有任何数据的工作表中生成图表。
package main
import (
"github.com/360EntSecGroup-Skylar/excelize"
)
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 {
println(err.Error())
return
}
// 保存xlsx文件到指定路径
if err := f.SaveAs("Book1.xlsx"); err != nil {
println(err.Error())
}
}
package main
import (
_ "image/gif"
_ "image/jpeg"
_ "image/png"
"github.com/360EntSecGroup-Skylar/excelize"
)
func main() {
f, err := excelize.OpenFile("Book1.xlsx")
if err != nil {
println(err.Error())
return
}
// 插入图片
if err := f.AddPicture("Sheet1", "A2", "image.png", ""); err != nil {
println(err.Error())
}
// 插入缩放的图片
if err := f.AddPicture("Sheet1", "D2", "image.jpg", `{"x_scale": 0.5, "y_scale": 0.5}`); err != nil {
println(err.Error())
}
// 插入偏移的图片,并支持打印
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 {
println(err.Error())
}
// 保存xlsx文件
if err = f.Save(); err != nil {
println(err.Error())
}
}