From ccf65504837d81ba2f2ee0e1ef74923f13b05b13 Mon Sep 17 00:00:00 2001 From: zhangxin Date: Tue, 23 Mar 2021 11:38:21 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E5=B0=86saveExcelFile=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E4=BB=8Eutils=E5=8C=85=E4=B8=8B=E7=9A=84utils=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B9=E4=B8=AD=E7=A7=BB=E5=88=B0grmi=E5=8C=85?= =?UTF-8?q?=E4=B8=8B=E7=9A=84export=E7=9A=84=E6=96=87=E4=BB=B6=E4=B8=AD?= =?UTF-8?q?=EF=BC=8C=E7=94=A8=E4=BA=8E=E8=A7=A3=E5=86=B3=E5=BE=AA=E7=8E=AF?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=202.=20saveExcelFile=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E5=AF=B9=E4=BC=A0=E5=A6=82=E7=9A=84=E7=BB=93=E6=9E=84=E4=BD=93?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E7=B1=BB=E5=9E=8B=E5=81=9A=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E8=8B=A5=E4=B8=BAgrmi.Date=E6=88=96grmi.DateTime=E5=88=99?= =?UTF-8?q?=E8=B0=83=E7=94=A8ToString=E6=96=B9=E6=B3=95=20=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E6=88=90=E5=AD=97=E7=AC=A6=E4=B8=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- grmi/export.go | 110 +++++++++++++++++++++++++++++++++++++++++++++++++ utils/utils.go | 68 ------------------------------ 2 files changed, 110 insertions(+), 68 deletions(-) create mode 100644 grmi/export.go diff --git a/grmi/export.go b/grmi/export.go new file mode 100644 index 0000000..c059967 --- /dev/null +++ b/grmi/export.go @@ -0,0 +1,110 @@ +/****************************************************************************** + * @Function Name : + *----------------------------------------------------------------------------- + * @Description : + * @Function Parameters: + * @Return Value : + * @Author : Zhang Xin + * @Date : 2021/3/3 11:02 + ******************************************************************************/ +package grmi + +import ( + "LAPP_GAAS_GFrame_BACKEND/utils" + "errors" + "fmt" + "github.com/360EntSecGroup-Skylar/excelize/v2" + "reflect" +) + +/****************************************************************************** + * + * @Function Name : SaveExcelFile + *----------------------------------------------------------------------------- + * + * @Description : 把传入的[]interface 数据保存成excel + * + * @Function Parameters : []interface{} 需要保存的数据切片 + * + * @Function Parameters : sheetName excel sheet名称 + * + * @Function Parameters : prefixFilename 保存文件的前缀名称 后面会有自动添加时间和文件类型后缀 + * + * @Return Value : filepath 文件路径 + * + * @Return Value : err 执行出现的错误 + * + * @Author : zhangxin + * + * @Date : 2021-03-19 + * + ******************************************************************************/ +func SaveExcelFile(list []interface{}, titleList []string, sheetName string, prefixFilename string) (filepath string, err error) { + file := excelize.NewFile() + if sheetName != "Sheet1" { + file.NewSheet(sheetName) + file.DeleteSheet("Sheet1") + } + streamWriter, err := file.NewStreamWriter(sheetName) + if err != nil { + fmt.Println("errors:", err.Error()) + return "", err + } + for index, item := range list { + if index == 0 { + typeOfS := reflect.TypeOf(item) + row := make([]interface{}, typeOfS.NumField()) + if len(titleList) != 0 { + if len(titleList) != typeOfS.NumField() { + return "", errors.New("titleList和item字段数量不相等") + } + for i := 0; i < typeOfS.NumField(); i++ { + row[i] = titleList[i] + } + + } else { + 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) + } + } + reflectValue := reflect.ValueOf(item) + row := make([]interface{}, reflectValue.NumField()) + for i := 0; i < reflectValue.NumField(); i++ { + var date Date + var datetime DateTime + if reflect.TypeOf(date) == reflectValue.Field(i).Type() { + filed := reflectValue.Field(i).Interface().(Date) + row[i] = filed.ToString() + } else if reflect.TypeOf(datetime) == reflectValue.Field(i).Type() { + filed := reflectValue.Field(i).Interface().(DateTime) + row[i] = filed.ToString() + } else { + row[i] = reflectValue.Field(i) + } + } + cell, _ := excelize.CoordinatesToCellName(1, index+2) + if err := streamWriter.SetRow(cell, row); err != nil { + return "", err + } + } + if err := streamWriter.Flush(); err != nil { + return "", err + } + filename := utils.MakeOrderSn(prefixFilename) + ".xlsx" + dirname, err := utils.GetCurrentPath("web/public/uploadxlsx") + if err != nil { + return "", err + } + filepath = dirname + "/" + filename + err = file.SaveAs(filepath) + if err != nil { + return "", err + } + return filepath, nil +} diff --git a/utils/utils.go b/utils/utils.go index ef7e13b..379ee69 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -3,7 +3,6 @@ package utils import ( "errors" "fmt" - "github.com/360EntSecGroup-Skylar/excelize/v2" "github.com/lianggx6/goutf16" "io" "math/rand" @@ -389,70 +388,3 @@ func FileExist(file string) bool { return true } - -/****************************************************************************** - * - * @Function Name : SaveExcelFile - *----------------------------------------------------------------------------- - * - * @Description : 把传入的[]interface 数据保存成excel - * - * @Function Parameters : []interface{} 需要保存的数据切片 - * - * @Function Parameters : sheetName excel sheet名称 - * - * @Function Parameters : prefixFilename 保存文件的前缀名称 后面会有自动添加时间和文件类型后缀 - * - * @Return Value : filepath 文件路径 - * - * @Return Value : err 执行出现的错误 - * - * @Author : zhangxin - * - * @Date : 2021-03-19 - * - ******************************************************************************/ -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 - } - filepath = dirname + "/" + filename - err = file.SaveAs(filepath) - if err != nil { - return "", err - } - return filepath, nil -} \ No newline at end of file