custom_analysis_edb.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package excel
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "eta/eta_api/models/data_manage/excel"
  6. excelServices "eta/eta_api/services/excel"
  7. "fmt"
  8. )
  9. // GetCustomAnalysisExcelData 获取自定义分析的表格data数据
  10. func GetCustomAnalysisExcelData(excelInfo *excel.ExcelInfo) (luckySheet excelServices.LuckySheet, err error, errMsg string) {
  11. // 查找当前excel的sheet列表
  12. sheetList, err := excel.GetAllSheetList(excelInfo.ExcelInfoId)
  13. if err != nil {
  14. errMsg = "保存失败"
  15. err = errors.New("查找当前excel的sheet列表失败,Err:" + err.Error())
  16. return
  17. }
  18. currSheetMap := make(map[string]string)
  19. for _, sheet := range sheetList {
  20. currSheetMap[sheet.SheetName] = sheet.SheetName
  21. }
  22. sheetCellDataMapList := make(map[int][]excelServices.LuckySheetCellData)
  23. // 通过excel的id获取各个sheet的单元格数据map
  24. {
  25. dataList, tmpErr := excel.GetSheetDataListByExcelInfoId(excelInfo.ExcelInfoId)
  26. if tmpErr != nil {
  27. err = tmpErr
  28. return
  29. }
  30. for _, cellData := range dataList {
  31. sheetDataList, ok := sheetCellDataMapList[cellData.ExcelSheetId]
  32. if !ok {
  33. sheetDataList = make([]excelServices.LuckySheetCellData, 0)
  34. }
  35. tmpSheetDataList := make([]excelServices.LuckySheetCellData, 0)
  36. err = json.Unmarshal([]byte(cellData.Data), &tmpSheetDataList)
  37. if err != nil {
  38. return
  39. }
  40. sheetCellDataMapList[cellData.ExcelSheetId] = append(sheetDataList, tmpSheetDataList...)
  41. }
  42. }
  43. // 转成luckySheet的数据格式
  44. luckySheet = excelServices.LuckySheet{
  45. SheetList: make([]excelServices.LuckySheetData, 0),
  46. }
  47. for _, sheet := range sheetList {
  48. var luckySheetDataConfig excelServices.LuckySheetDataConfig
  49. err = json.Unmarshal([]byte(sheet.Config), &luckySheetDataConfig)
  50. if err != nil {
  51. return
  52. }
  53. tmpLuckySheetDataInfo := excelServices.LuckySheetData{
  54. Name: sheet.SheetName,
  55. Index: sheet.Sort,
  56. CellData: sheetCellDataMapList[sheet.ExcelSheetId],
  57. Config: luckySheetDataConfig,
  58. }
  59. luckySheet.SheetList = append(luckySheet.SheetList, tmpLuckySheetDataInfo)
  60. }
  61. return
  62. }
  63. // GenerateExcelCustomAnalysisExcel 根据自定义分析的表格data数据生成excel
  64. func GenerateExcelCustomAnalysisExcel(excelInfo *excel.ExcelInfo) (downloadFilePath string, err error, errMsg string) {
  65. luckySheet, err, errMsg := GetCustomAnalysisExcelData(excelInfo)
  66. if err != nil {
  67. return
  68. }
  69. downloadFilePath, err = luckySheet.ToExcel()
  70. fmt.Println("生成的文件地址:", downloadFilePath)
  71. return
  72. }