Goland操作Excel表格

一、创建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, "	")
			}
			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))
}
原文地址:https://www.cnblogs.com/hsyw/p/15087440.html