package excel import ( "encoding/json" "errors" "eta/eta_api/models/data_manage/excel" excelServices "eta/eta_api/services/excel" "eta/eta_api/utils" "fmt" "github.com/araddon/dateparse" "github.com/shopspring/decimal" ) // GetCustomAnalysisExcelData 获取自定义分析的表格data数据 func GetCustomAnalysisExcelData(excelInfo *excel.ExcelInfo) (luckySheet excelServices.LuckySheet, err error, errMsg string) { // 查找当前excel的sheet列表 sheetList, err := excel.GetAllSheetList(excelInfo.ExcelInfoId) if err != nil { errMsg = "保存失败" err = errors.New("查找当前excel的sheet列表失败,Err:" + err.Error()) return } currSheetMap := make(map[string]string) for _, sheet := range sheetList { currSheetMap[sheet.SheetName] = sheet.SheetName } sheetCellDataMapList := make(map[int][]excelServices.LuckySheetCellData) // 通过excel的id获取各个sheet的单元格数据map { dataList, tmpErr := excel.GetAllSheetDataListByExcelInfoId(excelInfo.ExcelInfoId) if tmpErr != nil { err = tmpErr return } for _, cellData := range dataList { sheetDataList, ok := sheetCellDataMapList[cellData.ExcelSheetId] if !ok { sheetDataList = make([]excelServices.LuckySheetCellData, 0) } tmpSheetDataList := make([]excelServices.LuckySheetCellData, 0) err = json.Unmarshal([]byte(cellData.Data), &tmpSheetDataList) if err != nil { return } sheetCellDataMapList[cellData.ExcelSheetId] = append(sheetDataList, tmpSheetDataList...) } } // 转成luckySheet的数据格式 luckySheet = excelServices.LuckySheet{ SheetList: make([]excelServices.LuckySheetData, 0), } for _, sheet := range sheetList { var luckySheetDataConfig excelServices.LuckySheetDataConfig err = json.Unmarshal([]byte(sheet.Config), &luckySheetDataConfig) if err != nil { return } tmpLuckySheetDataInfo := excelServices.LuckySheetData{ Name: sheet.SheetName, Index: sheet.Sort, CellData: sheetCellDataMapList[sheet.ExcelSheetId], Config: luckySheetDataConfig, } luckySheet.SheetList = append(luckySheet.SheetList, tmpLuckySheetDataInfo) } return } // GenerateExcelCustomAnalysisExcel 根据自定义分析的表格data数据生成excel func GenerateExcelCustomAnalysisExcel(excelInfo *excel.ExcelInfo) (downloadFilePath string, err error, errMsg string) { luckySheet, err, errMsg := GetCustomAnalysisExcelData(excelInfo) if err != nil { return } downloadFilePath, err = luckySheet.ToExcel() fmt.Println("生成的文件地址:", downloadFilePath) return } // HandleEdbSequenceVal 处理日期集和数据集(获取可用的日期、数据集) func HandleEdbSequenceVal(dateSequenceVal, dataSequenceVal []string) (newDateList []string, newDataList []float64, err error, errMsg string) { newDateList = make([]string, 0) newDataList = make([]float64, 0) // 数据集 type dataStruct struct { Value float64 Ok bool } dataList := make([]dataStruct, 0) { var startData bool for _, v := range dataSequenceVal { // 如果没有数据集,那么就过滤 if v == `` { // 如果开始插入数据了,那么就需要插入不存在值 if startData { dataList = append(dataList, dataStruct{ Value: 0, Ok: false, }) } continue } startData = true tmpValDec, tmpErr := decimal.NewFromString(v) if tmpErr != nil { dataList = append(dataList, dataStruct{ Value: 0, Ok: false, }) continue } tmpVal, _ := tmpValDec.Float64() dataList = append(dataList, dataStruct{ Value: tmpVal, Ok: true, }) } } // 日期集 dateList := make([]string, 0) { var startData bool for _, v := range dateSequenceVal { // 如果没有数据集,那么就过滤 if v == `` { // 如果开始插入数据了,那么就需要插入不存在值 if startData { dateList = append(dateList, "") } continue } startData = true t1, tmpErr := dateparse.ParseAny(v) if tmpErr != nil { dateList = append(dateList, "") continue } dateList = append(dateList, t1.Format(utils.FormatDate)) } } lenData := len(dataList) lenDate := len(dateList) // 最小个数 num := lenDate if num > lenData { num = lenData } for i := 0; i < num; i++ { date := dateList[i] data := dataList[i] // 日期为空、数据为空 if !data.Ok || date == `` { continue } newDateList = append(newDateList, date) newDataList = append(newDataList, data.Value) } return }