引入excel文件处理包 "github.com/tealeg/xlsx" 直接excel文件进行处理
excel文件导入:
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()
//校验文件后缀
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("打开文件异常:%v", err)
this.toJson(response)
}
//处理sheet1
serverserverSheet := *excelFile.Sheet["sheet1"]
serverResult, err := ls.Import(serverSheet)
if err != nil {
response.Msg = seelog.Error("导入server异常:",err).Error()
this.toJson(response)
}
result["server"] = append(result["server"], serverResult...)
//处理sheet2
netAssetnetAssetRows := *excelFile.Sheet["网络设备"]
netAssetResult, err := ln.Import(netAssetRows)
if err != nil {
response.Msg = seelog.Error("导入网络设备异常:", err).Error()
this.toJson(response)
}
result["netAsset"] = append(result["netAsset"], netAssetResult...)
excel文件导出:
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
}
}
//表数据
for _, datauint := range data {
row = sheet.AddRow()
for _, v := range fields {
//跳过未定义表头的列
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)
}
}
}
//创建excel文件
file := xlsx.NewFile()
//将生成的sheet加入到excel文件中
_, err = file.AppendSheet(*sheet, sheetName)
if err!=nil{
return nil
}