|
@ -3,6 +3,7 @@ package utils |
|
|
import ( |
|
|
import ( |
|
|
"errors" |
|
|
"errors" |
|
|
"fmt" |
|
|
"fmt" |
|
|
|
|
|
"github.com/360EntSecGroup-Skylar/excelize/v2" |
|
|
"github.com/lianggx6/goutf16" |
|
|
"github.com/lianggx6/goutf16" |
|
|
"io" |
|
|
"io" |
|
|
"math/rand" |
|
|
"math/rand" |
|
@ -386,4 +387,46 @@ func FileExist(file string) bool { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return true |
|
|
return true |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func SaveExcelFile(list []interface{}, sheetName string, prefixFilename string) (filepath string, err error) { |
|
|
|
|
|
file := excelize.NewFile() |
|
|
|
|
|
streamWriter, err := file.NewStreamWriter(sheetName) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return "", err |
|
|
|
|
|
} |
|
|
|
|
|
for index, item := range list { |
|
|
|
|
|
if index == 0 { |
|
|
|
|
|
typeOfS := reflect.TypeOf(item) |
|
|
|
|
|
row := make([]interface{}, typeOfS.NumField()) |
|
|
|
|
|
for i := 0; i < typeOfS.NumField(); i++ { |
|
|
|
|
|
row[i] = typeOfS.Field(i).Name |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
cell, _:= excelize.CoordinatesToCellName(1, 1) |
|
|
|
|
|
if err := streamWriter.SetRow(cell, row); err != nil { |
|
|
|
|
|
fmt.Println(err) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
typeOfS := reflect.ValueOf(item) |
|
|
|
|
|
row := make([]interface{}, typeOfS.NumField()) |
|
|
|
|
|
for i := 0; i < typeOfS.NumField(); i++ { |
|
|
|
|
|
row[i] = typeOfS.Field(i) |
|
|
|
|
|
} |
|
|
|
|
|
cell, _:= excelize.CoordinatesToCellName(1, index+2) |
|
|
|
|
|
if err := streamWriter.SetRow(cell, row); err != nil { |
|
|
|
|
|
fmt.Println(err) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
if err := streamWriter.Flush(); err != nil { |
|
|
|
|
|
fmt.Println(err) |
|
|
|
|
|
} |
|
|
|
|
|
filename := MakeOrderSn(prefixFilename) + ".xlsx" |
|
|
|
|
|
dirname, err := GetCurrentPath("web/public/uploadxlsx") |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return "", err |
|
|
|
|
|
} |
|
|
|
|
|
return dirname + "/" + filename, nil |
|
|
} |
|
|
} |