• Java项目-苍穹外卖-Day12-Apache POI及Excel数据报表


    前言

    最后一天,主要就是数据怎么从后端导出到excel表格,以及工作台内容的开发

    工作台

    需求分析

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

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

    代码导入

    自己导入一下

    功能测试

    在这里插入图片描述

    Apache POI

    介绍

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

    入门案例

    在这里插入图片描述

    写入excel文件内容

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

    读取excel文件

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

    导出运营数据Excel表

    需求分析

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

    在这里插入图片描述

    代码开发

    在这里插入图片描述

    主要就是接受请求,然后从数据库读取数据写到默认的excel表格里面,然后通过httpservletrespons对象获取一个输出流,写回文件

    把我们的默认excel模板文件导入项目resource里面
    在这里插入图片描述

    reportController

        /**
         *到处运营数据报表
         */
        @GetMapping("/export")
        @ApiOperation("导出运营数据报表")
        public void export(HttpServletResponse reponse){
            reportService.exportBusinessData(reponse);
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    reportServiceImpl

        /**
         * 导出运营数据报表
         * @param response
         */
        public void exportBusinessData(HttpServletResponse response) {
            //1. 查询数据库,获取营业数据---查询最近30天的运营数据
            LocalDate dateBegin = LocalDate.now().minusDays(30);
            LocalDate dateEnd = LocalDate.now().minusDays(1);
    
            //查询概览数据
            BusinessDataVO businessDataVO = workspaceService.getBusinessData(LocalDateTime.of(dateBegin, LocalTime.MIN), LocalDateTime.of(dateEnd, LocalTime.MAX));
    
            //2. 通过POI将数据写入到Excel文件中
            InputStream in = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");
    
            try {
                //基于模板文件创建一个新的Excel文件
                XSSFWorkbook excel = new XSSFWorkbook(in);
    
                //获取表格文件的Sheet页
                XSSFSheet sheet = excel.getSheet("Sheet1");
    
                //填充数据--时间
                sheet.getRow(1).getCell(1).setCellValue("时间:" + dateBegin + "至" + dateEnd);
    
                //获得第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 = dateBegin.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) {
                e.printStackTrace();
            }
    
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    功能测试

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

  • 相关阅读:
    微信公众号消息接入(普通消息+模板消息)
    UDP-B-L-阿拉伯糖二钠盐,UDP-b-L-arabinopyranose disodium salt,15839-78-8
    Java—修饰符
    为什么都说NFS读写性能差,如何进行优化?
    【装机】通过快捷键设置BIOS从U盘启动
    读未提交-为什么可以读到别人修改的数据
    四入进博会,优衣库围绕科技可持续演绎“服装进化论”
    Jmeter-逻辑控制器,定时器,前置处理器,取样器
    使用HTML制作静态网站作业——我的校园运动会(HTML+CSS)
    QT雷达扫描图
  • 原文地址:https://blog.csdn.net/y_k_j_c/article/details/132822928