黑马苍穹外卖项目笔记12_数据统计–Excel报表(完结撒花)


一.工作台

1.需求分析和设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.代码导入

直接导入代码即可

3.功能测试

前后端联调测试即可

二.Apache POI

1.介绍

Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。

一般情况下,POI 都是用于操作 Excel 文件。

Apache POI 的应用场景:
1.银行网银系统导出交易明细

2.各种业务系统导出Excel报表

3.批量导入业务数据

2.入门案例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三.导出运营数据Excel报表

1.需求分析和设计

在这里插入图片描述
业务规则:
1.导出Excel形式的报表文件
2.导出最近30天的运营数据

接口设计:
在这里插入图片描述

2.代码开发

根据接口定义,在ReportController中创建export方法:

/**
     * 导出运营数据报表
     * @param response
     */
    @GetMapping("/export")
    @ApiOperation("导出运营数据报表")
    public void export(HttpServletResponse response){
        reportService.exportBusinessData(response);
    }

在ReportService接口中声明导出运营数据报表的方法:

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

在ReportServiceImpl实现类中实现导出运营数据报表的方法

/**
     * 导出近30天的运营数据报表
     *
     * @param response
     */
    public void exportBusinessData(HttpServletResponse response) {
        LocalDate begin = LocalDate.now().minusDays(30);
        LocalDate end = LocalDate.now().minusDays(1);

        BusinessDataVO businessData = workspaceService.getBusinessData(LocalDateTime.of(begin, LocalTime.MIN), LocalDateTime.of(end, LocalTime.MAX));

        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");

        try {
            XSSFWorkbook excel = new XSSFWorkbook(inputStream);

            XSSFSheet sheet = excel.getSheet("Sheet1");
            sheet.getRow(1).getCell(1).setCellValue(begin + "至" + end);

            XSSFRow row = sheet.getRow(3);
            row.getCell(2).setCellValue(businessData.getTurnover());
            row.getCell(4).setCellValue(businessData.getOrderCompletionRate());
            row.getCell(6).setCellValue(businessData.getNewUsers());

            row = sheet.getRow(4);
            row.getCell(2).setCellValue(businessData.getValidOrderCount());
            row.getCell(4).setCellValue(businessData.getUnitPrice());

            for (int i = 0; i < 30; i++) {
                LocalDate date = begin.plusDays(i);

                businessData = workspaceService.getBusinessData(LocalDateTime.of(date, LocalTime.MIN), LocalDateTime.of(date, LocalTime.MAX));

                row = sheet.getRow(i + 7);
                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());
            }
            //通过输出流将文件下载到客户端浏览器中
            ServletOutputStream out = response.getOutputStream();
            excel.write(out);

            out.flush();
            out.close();
            inputStream.close();
            excel.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Q&A

1.ServletOutputStream 是什么输出流?

ServletOutputStream 是用于将数据写入到 Servlet 的响应中的输出流。它是javax.servlet.ServletOutputStream类的实例,==用于在 Servlet 中向客户端发送二进制数据,比如文件内容。==在代码中通过 response.getOutputStream() 获取了一个 ServletOutputStream 对象,这表示将通过这个输出流将数据写入到 HTTP 响应中。

2.excel.write(out) 具体有什么含义?

XSSFWorkbook 是 Apache POI 库中用于处理 Excel 文件的类,表示一个基于 XML 的 Excel 文档。
excel.write(out) 的含义是将 XSSFWorkbook 对象中的内容写入到 ServletOutputStream 中,从而将 Excel 文件的内容发送给客户端浏览器。这通常用于在后端生成 Excel 文件,并通过 HTTP 响应将文件内容返回给前端,从而实现文件下载的功能。
具体而言,excel.write(out) 会将 Excel 文件的内容写入到提供的输出流 (ServletOutputStream) 中,这个输出流连接着客户端的浏览器。这样,通过浏览器访问相应的接口时,浏览器会收到包含 Excel 文件内容的响应,并触发文件下载操作。

功能测试

全部前后端联调测试即可

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值