引入excel文件處理包 "github.com/tealeg/xlsx" 直接excel文件進(jìn)行處理
excel文件導(dǎo)入:
import "github.com/tealeg/xlsx"
//獲取文件
file, h, err := this.GetFile("Filename")
if err != nil {
response.Msg = fmt.Sprintf("獲取文件異常:%s", err.Error())
this.toJson(&response)
}
defer file.Close()
//校驗(yàn)文件后綴
if !strings.HasSuffix(h.Filename, ".xlsx") {
response.Msg = "文件格式異常"
this.toJson(response)
}
//讀取文件
b, err := ioutil.ReadAll(file)
if err != nil {
response.Msg = fmt.Sprintf("讀取文件異常:%v", err)
this.toJson(response)
}
//解析文件
zr, err := zip.NewReader(bytes.NewReader(b), int64(len(b)))
if err != nil {
response.Msg = fmt.Sprintf("解析文件異常:%v", err)
this.toJson(response)
}
excelFile, err := xlsx.ReadZipReader(zr)
if err != nil {
response.Msg = fmt.Sprintf("打開(kāi)文件異常:%v", err)
this.toJson(response)
}
//處理sheet1
serverserverSheet := *excelFile.Sheet["sheet1"]
serverResult, err := ls.Import(serverSheet)
if err != nil {
response.Msg = seelog.Error("導(dǎo)入server異常:",err).Error()
this.toJson(response)
}
result["server"] = append(result["server"], serverResult...)
//處理sheet2
netAssetnetAssetRows := *excelFile.Sheet["網(wǎng)絡(luò)設(shè)備"]
netAssetResult, err := ln.Import(netAssetRows)
if err != nil {
response.Msg = seelog.Error("導(dǎo)入網(wǎng)絡(luò)設(shè)備異常:", err).Error()
this.toJson(response)
}
result["netAsset"] = append(result["netAsset"], netAssetResult...)
excel文件導(dǎo)出:
import "github.com/tealeg/xlsx"
sheet, _ := xlsx.NewFile().AddSheet("sheet1")
//表頭行
row := sheet.AddRow()
for _, k := range fields {
if v, ok := fieldsMap[k]; ok {
cell := row.AddCell()
cell.Value = v
}
}
//表數(shù)據(jù)
for _, datauint := range data {
row = sheet.AddRow()
for _, v := range fields {
//跳過(guò)未定義表頭的列
if _, ok := fieldsMap[v]; !ok {
continue
}
cell := row.AddCell()
switch value := datauint[v].(type) {
case time.Time:
cell.Value = value.Format(DATETIME_LAYOUT)
default:
cell.Value = fmt.Sprintf("%v", value)
}
}
}
//創(chuàng)建excel文件
file := xlsx.NewFile()
//將生成的sheet加入到excel文件中
_, err = file.AppendSheet(*sheet, sheetName)
if err!=nil{
return nil
}