一、创建Excel表格
package main
import (
"fmt"
"github.com/360EntSecGroup-Skylar/excelize/v2"
)
func main() {
// 创建excel表格
// new一个文件句柄
file := excelize.NewFile()
// 创建一个新的sheet,写Sheet2默认会有个Sheet1,当然我们也可以执行操作Sheet1
index := file.NewSheet("Sheet2")
// 设置单元格的值
/*
Sheet2: Sheet名称
A2 : 单元格
Hello : 单元格的值
*/
file.SetCellValue("Sheet2", "A2", "Hello")
file.SetCellValue("Sheet2", "B2", 1000000)
// 设置单元格样式
style, err := file.NewStyle(`{
"font":
{
"bold": true,
"family": "font-family",
"size": 20,
"color": "#777777"
}
}`)
if err != nil {
fmt.Println(err)
}
// 设值
file.SetCellValue("Sheet1", "A1", "Hello")
// 设置单元格样式
/*
Sheet1: 要操作的Sheet页name
A1 : 单元格起位置 ("A1", "A1")A1一整列都是这个格式
A1 : 单元格终位置 ("A1", "D5")A1-D都是这个格式
style : 单元格格式
*/
file.SetCellStyle("Sheet1", "A1", "D5", style)
// 设置工作簿的活动工作表
file.SetActiveSheet(index)
// 指定保存路径
if err := file.SaveAs("test.xlsx"); err != nil {
fmt.Println(err)
}
}
二、往excel表格中插入图片
package main
import (
"fmt"
_ "image/gif"
_ "image/jpeg"
_ "image/png"
"github.com/360EntSecGroup-Skylar/excelize/v2"
)
func main() {
// 打开一个Excel表格
file, err := excelize.OpenFile("test.xlsx")
if err != nil {
fmt.Println(err)
return
}
// 插入图片
if err := file.AddPicture("Sheet1", "A2", "images.png", ""); err != nil {
fmt.Println(err, "插入图片")
}
// 在支持打印的单元格中插入图片偏移量
if err := file.AddPicture(
"Sheet1", "H2",
"images.png",
`{"x_offset": 15, "y_offset": 10, "print_obj": true, "lock_aspect_ratio": false, "locked": false}`,
); err != nil {
fmt.Println(err, "图片偏移量")
}
// 使用原始路径保存xlsx文件
if err = file.Save(); err != nil {
fmt.Println(err)
}
}
三、读取Excel文件
package main
import (
"fmt"
_ "image/gif"
_ "image/jpeg"
_ "image/png"
"github.com/360EntSecGroup-Skylar/excelize/v2"
)
func main() {
// 打开一个Excel表格
file, err := excelize.OpenFile("test.xlsx")
if err != nil {
fmt.Println(err)
return
}
// 按给定的工作表名称和轴从单元格中获取值
if cell, err := file.GetCellValue("Sheet1", "A1"); err != nil {
fmt.Println(err)
return
} else {
fmt.Println(cell)
}
// 获取Sheet1中的所有行
rows, err := file.GetRows("Sheet1")
if err == nil {
for _, row := range rows {
for _, colCell := range row {
// print一行数据 (string类型是数据)
fmt.Print(colCell, "\t")
}
fmt.Println()
}
}
}
四、生成Excel文件并下载
package main
import (
"fmt"
"log"
"net/http"
"github.com/360EntSecGroup-Skylar/excelize/v2"
)
func DownExcel(response http.ResponseWriter, request *http.Request) {
// 创建一个文件句柄
file := excelize.NewFile()
// 设置单元格的值
file.SetCellValue("Sheet1", "A1", "你好")
// 按给定路径保存xlsx文件
if err := file.SaveAs("test01.xlsx"); err != nil {
fmt.Println(err)
}
response.Header().Set("Content-Type", "application/octet-stream")
// 下载后的名称
response.Header().Set("Content-Disposition", "attachment; filename="+"test02.xlsx")
response.Header().Set("Content-Transfer-Encoding", "binary")
_ = file.Write(response)
}
func main() {
http.HandleFunc("/", DownExcel) // 设置访问路由
log.Fatal(http.ListenAndServe(":8080", nil))
}