Demo 学 Echo Part16 读写Excel XLSX文件(Excelize)
Web应用中免不了用到Excel。当然现在都是用XLSX格式了。
先安装go get github.com/360EntSecGroup-Skylar/excelize
##建立Excel文件
package main
import (
"fmt"
"log"
"github.com/360EntSecGroup-Skylar/excelize"
)
type M map[string]interface{}
var data = []M{
M{"Name": "Noval", "Gender": "male", "Age": 18},
M{"Name": "Nabila", "Gender": "female", "Age": 12},
M{"Name": "Yasa", "Gender": "male", "Age": 11},
}
func main() {
xlsx := excelize.NewFile()
sheet1Name := "Sheet One"
xlsx.SetSheetName(xlsx.GetSheetName(1), sheet1Name)
xlsx.SetCellValue(sheet1Name, "A1", "Name")
xlsx.SetCellValue(sheet1Name, "B1", "Gender")
xlsx.SetCellValue(sheet1Name, "C1", "Age")
err := xlsx.AutoFilter(sheet1Name, "A1", "C1", "")
if err != nil {
log.Fatal("ERROR", err.Error())
}
for i, each := range data {
xlsx.SetCellValue(sheet1Name, fmt.Sprintf("A%d", i+2), each["Name"])
xlsx.SetCellValue(sheet1Name, fmt.Sprintf("B%d", i+2), each["Gender"])
xlsx.SetCellValue(sheet1Name, fmt.Sprintf("C%d", i+2), each["Age"])
}
err = xlsx.SaveAs("./file1.xlsx")
if err != nil {
fmt.Println(err)
}
}
打开看看 ##排版,合并单元格和单元格样式
package main
import (
"fmt"
"log"
"github.com/360EntSecGroup-Skylar/excelize"
)
type M map[string]interface{}
var data = []M{
M{"Name": "Noval", "Gender": "male", "Age": 18},
M{"Name": "Nabila", "Gender": "female", "Age": 12},
M{"Name": "Yasa", "Gender": "male", "Age": 11},
}
func main() {
xlsx := excelize.NewFile()
sheet1Name := "Sheet One"
xlsx.SetSheetName(xlsx.GetSheetName(1), sheet1Name)
xlsx.SetCellValue(sheet1Name, "A1", "Name")
xlsx.SetCellValue(sheet1Name, "B1", "Gender")
xlsx.SetCellValue(sheet1Name, "C1", "Age")
err := xlsx.AutoFilter(sheet1Name, "A1", "C1", "")
if err != nil {
log.Fatal("ERROR", err.Error())
}
for i, each := range data {
xlsx.SetCellValue(sheet1Name, fmt.Sprintf("A%d", i+2), each["Name"])
xlsx.SetCellValue(sheet1Name, fmt.Sprintf("B%d", i+2), each["Gender"])
xlsx.SetCellValue(sheet1Name, fmt.Sprintf("C%d", i+2), each["Age"])
}
//sheet 2
sheet2Name := "Sheet two"
sheetIndex := xlsx.NewSheet(sheet2Name)
xlsx.SetActiveSheet(sheetIndex)
xlsx.SetCellValue(sheet2Name, "A1", "Hello")
xlsx.MergeCell(sheet2Name, "A1", "B1")
style, err := xlsx.NewStyle(`{
"font": {
"bold": true,
"size": 36
},
"fill": {
"type": "pattern",
"color": ["#E0EBF5"],
"pattern": 1
}
}`)
if err != nil {
log.Fatal("ERROR", err.Error())
}
xlsx.SetCellStyle(sheet2Name, "A1", "A1", style)
err = xlsx.SaveAs("./file2.xlsx")
if err != nil {
fmt.Println(err)
}
}
效果
##读取Excel
package main
import (
"fmt"
"log"
"github.com/360EntSecGroup-Skylar/excelize"
)
type M map[string]interface{}
func main() {
xlsx, err := excelize.OpenFile("./file1.xlsx")
if err != nil {
log.Fatal("ERROR", err.Error())
}
sheet1Name := "Sheet One"
rows := make([]M, 0)
for i := 2; i < 5; i++ {
v1, _ := xlsx.GetCellValue(sheet1Name, fmt.Sprintf("A%d", i))
v2, _ := xlsx.GetCellValue(sheet1Name, fmt.Sprintf("B%d", i))
v3, _ := xlsx.GetCellValue(sheet1Name, fmt.Sprintf("C%d", i))
row := M{
"Name": v1,
"Gender": v2,
"Age": v3,
}
rows = append(rows, row)
}
fmt.Printf("%v \n", rows)
}
结果如下:
go run main.go
[map[Age:18 Gender:male Name:Noval] map[Age:12 Gender:female Name:Nabila] map[Age:11
Gender:male Name:Yasa]]
最后修改于 2019-08-18