Goland操作Excel表格
阿新 • • 發佈:2021-08-01
一、建立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))
}