1. 程式人生 > 其它 >Goland操作Excel表格

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, "\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))
}