目录

一、Apache POI_介绍

二、导出运营数据Excel报表_需求分析

三、导出运营数据Excel报表

1.导入依赖pom.xml

2.导入运营数据报表模板.xlsx

3.ReportController.java

4.interface ReportService

5.ReportServiceImpl.java

6.效果图


一、Apache POI_介绍

二、导出运营数据Excel报表_需求分析

三、导出运营数据Excel报表

1.导入依赖pom.xml

        <!-- Apache poi 依赖 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>适合你的版本</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>适合你的版本</version>
        </dependency>

2.导入运营数据报表模板.xlsx

到图片这个目录下 resources/template/运营数据报表模板.xlsx

3.ReportController.java

    // 导出运营数据报表
    @Operation(summary = "导出运营数据报表")
    @GetMapping("/export")
    public void export(HttpServletResponse response){

        reportService.exportBusinessData(response);
        log.info("导出最近30天的运营数据报表...");
    }

4.interface ReportService

    // 导出最近30天的运营数据报表
    void exportBusinessData(HttpServletResponse response);

5.ReportServiceImpl.java

// 导出最近30天的运营数据报表
    @Override
    public void exportBusinessData(HttpServletResponse response) {
        // 1.查询数据库,获取营业数据--查询最近30天的运营数据
        LocalDate dataBegin = LocalDate.now().minusDays(30);
        LocalDate dataEnd = LocalDate.now().minusDays(1);

        LocalDateTime begin = LocalDateTime.of(dataBegin, LocalTime.MIN);
        LocalDateTime end = LocalDateTime.of(dataEnd,LocalTime.MAX);

        // 查询概览数据
        BusinessDataVO businessDataVO = workspaceService.getBusinessData(begin, end);

        InputStream in = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");
        // 2.通过POI将数据写入Excel文件中
        try {
            // 基于模版文件创建一个新的Excel文件
            XSSFWorkbook excel = new XSSFWorkbook(in);

            // 获取表格文件名
            XSSFSheet sheet = excel.getSheet("Sheet1");

            // 填充数据--时间
            sheet.getRow(1).getCell(1).setCellValue("时间:" + dataBegin + "至" + dataEnd);

            // 填充第4行
            XSSFRow row = sheet.getRow(3);
            row.getCell(2).setCellValue(businessDataVO.getTurnover());
            row.getCell(4).setCellValue(businessDataVO.getOrderCompletionRate());
            row.getCell(6).setCellValue(businessDataVO.getNewUsers());

            // 填充第5行
            row = sheet.getRow(4);
            row.getCell(2).setCellValue(businessDataVO.getValidOrderCount());
            row.getCell(4).setCellValue(businessDataVO.getUnitPrice());

            // 填充明细数据
            for (int i = 0; i < 30 ; i++) {
                LocalDate date = dataBegin.plusDays(i);

                // 查询某一天的营业数据
                BusinessDataVO businessData = workspaceService.getBusinessData(LocalDateTime.of(date, LocalTime.MIN), LocalDateTime.of(date, LocalTime.MAX));

                // 获得某一行
               row = sheet.getRow(7 + i);
               row.getCell(1).setCellValue(date.toString());
               row.getCell(2).setCellValue(businessData.getTurnover());
               row.getCell(3).setCellValue(businessData.getValidOrderCount());
               row.getCell(4).setCellValue(businessData.getOrderCompletionRate());
               row.getCell(5).setCellValue(businessData.getUnitPrice());
               row.getCell(6).setCellValue(businessData.getNewUsers());

            }

            // 3.通过输出流将Excel文件下载到客户端浏览器
            ServletOutputStream out = response.getOutputStream();
            excel.write(out);

            // 关闭资源
            out.close();
            excel.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }

6.效果图

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐