java导出Excel接口

需求:需要实现一个导出的接口,点导出同时导出5个Excel表格,五种表格的数据筛选不同数据

java 复制代码
public String export(MarketReceiveVo query) {
        Date winApprovalStartDate = query.getWinApprovalStartDate();
        Date winApprovalEndDate = query.getWinApprovalEndDate();

        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String winApprovalStartDateStr = sdf.format(winApprovalStartDate);
        String winApprovalEndDateStr = sdf.format(winApprovalEndDate);

        // 根据日期获取团队详细信息
        List<MarketXxxxListVo> allAchievementExport = marketSysFrameworkService.getAllAchievement(winApprovalStartDate, winApprovalEndDate);//所有的
        List<MarketXxxxListVo> gManagerExportVo = marketSysFrameworkService.getGManager(winApprovalStartDate, winApprovalEndDate);// 副总的数据
        List<MarketXxxxListVo> leaderExports = marketSysFrameworkService.getLeaderExports(winApprovalStartDate, winApprovalEndDate);// 组长的数据
        List<MarketXxxxListVo> TeamMemberExport = marketSysFrameworkService.getTeamMemberExport(winApprovalStartDate, winApprovalEndDate);// 组员的数据
        List<MarketXxxxListVo> marketAchievementExport = marketSysFrameworkService.getDetailed(winApprovalStartDate, winApprovalEndDate); // 分配明细

        // 数据转换
        List<AllAchievementExportVo> exportVos = Optional.ofNullable(allAchievementExport)
                .orElse(new ArrayList<>())
                .stream()
                .map(source -> BeanUtil.convert(source, AllAchievementExportVo.class))
                .collect(Collectors.toList());

        List<GManagerExportVo> exportVosGManager = Optional.ofNullable(gManagerExportVo)
                .orElse(new ArrayList<>())
                .stream()
                .map(source -> BeanUtil.convert(source, GManagerExportVo.class))
                .collect(Collectors.toList()); //副总

        List<AllAchievementExportVo> exportVosGroupLeader = Optional.ofNullable(leaderExports)
                .orElse(new ArrayList<>())
                .stream()
                .map(source -> BeanUtil.convert(source, AllAchievementExportVo.class))
                .collect(Collectors.toList());

        List<AllAchievementExportVo> exportVosStaff = Optional.ofNullable(TeamMemberExport)
                .orElse(new ArrayList<>())
                .stream()
                .map(source -> BeanUtil.convert(source, AllAchievementExportVo.class))
                .collect(Collectors.toList());

        List<MarketAchievementExportVo> exportVosFive = Optional.ofNullable(marketAchievementExport)
                .orElse(new ArrayList<>())
                .stream()
                .map(source -> BeanUtil.convert(source, MarketAchievementExportVo.class))
                .collect(Collectors.toList());

        // 排序
        List<AllAchievementExportVo> sortedAll = sortData(exportVos);
        List<GManagerExportVo> sortedGManager = sortDataGManager(exportVosGManager);
        List<AllAchievementExportVo> sortedGroupLeader = sortData(exportVosGroupLeader);
        List<AllAchievementExportVo> sortedStaff = sortData(exportVosStaff);
        List<MarketAchievementExportVo> sortedDetailed= sortDataDetailed(exportVosFive);

        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
            ExcelWriter writeWorkbook = EasyExcel.write(outputStream).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();

            // 创建5个Sheet
            WriteSheet writeSheetAll = EasyExcel.writerSheet("所有人排名").head(AllAchievementExportVo.class).build();
            writeWorkbook.write(sortedAll, writeSheetAll);

            WriteSheet writeSheetGManager = EasyExcel.writerSheet("营销副总排名").head(GManagerExportVo.class).build();
            writeWorkbook.write(sortedGManager, writeSheetGManager);

            WriteSheet writeSheetAllThree = EasyExcel.writerSheet("组长排名").head(AllAchievementExportVo.class).build();
            writeWorkbook.write(sortedGroupLeader, writeSheetAllThree);

            WriteSheet writeSheetFour = EasyExcel.writerSheet("组员排名").head(AllAchievementExportVo.class).build();
            writeWorkbook.write(sortedStaff, writeSheetFour);

            WriteSheet writeSheetDetailed = EasyExcel.writerSheet("业绩分配明细").head(MarketAchievementExportVo.class).build();
            writeWorkbook.write(sortedDetailed, writeSheetDetailed);

            writeWorkbook.finish();
            try (ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray())) {
                FileInfo fileInfo = whaleClientConfig.getWhalefsClient()
                        .upload(whaleClientConfig.getBucketName(), "tmp/" + "业绩分配" + winApprovalStartDateStr + "-" + winApprovalEndDateStr + ".xlsx", inputStream, true);
                return fileInfo.getUrl();
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.error(String.format("业绩分配导出错误, 参数:[%s]", JSONObject.toJSONString(query)));
            log.error(String.format("业绩分配导出错误, 错误信息:[%s]", e.getMessage()));
            throw new BusinessException("导出Excel错误");
        }
    }

要注意导出类的实体Vo,对于一些Excel常用的注解,注解类的注释

java 复制代码
@ApiModelProperty(value = "序号")
    @TableId(type = IdType.AUTO)
    @ExcelProperty(value = "序号",index = 0)
    private Integer index;

多余不展示字段

java 复制代码
@ApiModelProperty(value = "上报通过开始日期")
    @DateTimeFormat("yyyy-MM-dd")
    @ExcelIgnore
    private Date winApprovalStartDate;
相关推荐
D***776528 分钟前
适用于IntelliJ IDEA 2024.1.2部署Tomcat的完整方法,以及笔者踩的坑,避免高血压,保姆级教程
java·tomcat·intellij-idea
20岁30年经验的码农31 分钟前
Spring Security 6.x 安全实践指南
java
胖咕噜的稞达鸭1 小时前
自定义shell命令行解释器自制
java·开发语言
q***33374 小时前
oracle 12c查看执行过的sql及当前正在执行的sql
java·sql·oracle
tobebetter95277 小时前
How to manage python versions on windows
开发语言·windows·python
Y***h1878 小时前
第二章 Spring中的Bean
java·后端·spring
8***29318 小时前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring
CoderYanger8 小时前
优选算法-栈:67.基本计算器Ⅱ
java·开发语言·算法·leetcode·职场和发展·1024程序员节
q***06298 小时前
Tomcat的升级
java·tomcat
多多*8 小时前
Java复习 操作系统原理 计算机网络相关 2025年11月23日
java·开发语言·网络·算法·spring·microsoft·maven