导出运营数据Excel报表

文章目录

概要

产品原型

在数据统计页面,有一个数据导出的按钮,点击该按钮时,其实就会下载一个文件。这个文件实际上是一个Excel形式的文件,文件中主要包含最近30日运营相关的数据。表格的形式已经固定,主要由概览数据和明细数据两部分组成。真正导出这个报表之后,相对应的数字就会填充在表格中,就可以进行存档。

原型图:

需求分析以及接口设计

业务规则:

  • 导出Excel形式的报表文件

  • 导出最近30天的运营数据

技术细节

1.Controller层

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

2.Service层:

 /**
     * 导出运营数据Excel表
     * @param httpServletResponse
     */
    public void export(HttpServletResponse httpServletResponse) {
        //1.查询近30天的运营数据
        LocalDateTime begin = LocalDateTime.now().minusDays(30);
        LocalDateTime end = LocalDateTime.now().minusDays(1);
        BusinessDataVO businessData = workspaceService.getBusinessData(begin,end);
        //2.将运营数据写入Excel表
        //2.1读取模版
        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("template/excel.xlsx");
        try {
            //2.2将运营数据填充到模版
            XSSFWorkbook excel = new XSSFWorkbook(inputStream);
            XSSFSheet sheet = excel.getSheet("Sheet1");
            //填充时间
            XSSFRow row = sheet.getRow(1);
            row.getCell(1).setCellValue("时间:" + begin + "~" + end);
            //填充概览数据(第4行)
            row = sheet.getRow(3);
            row.getCell(2).setCellValue(businessData.getTurnover());
            row.getCell(4).setCellValue(businessData.getOrderCompletionRate());
            row.getCell(6).setCellValue(businessData.getNewUsers());
            //第5行
            row = sheet.getRow(4);
            row.getCell(2).setCellValue(businessData.getValidOrderCount());
            row.getCell(4).setCellValue(businessData.getUnitPrice());
            //明细数据(第8行开始)
            for (int i = 0; i < 30; i++) {
                //获取到每一行
                row = sheet.getRow(7 + i);
                //填充一行的数据
                //获取到每一天
                LocalDateTime date = begin.plusDays(i);
                //准备每天的明细数据
                businessData = workspaceService.getBusinessData(date, date.plusDays(1));
                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.下载操作
            ServletOutputStream outputStream = httpServletResponse.getOutputStream();
            excel.write(outputStream);
            //关流
            outputStream.flush();
            outputStream.close();
            inputStream.close();
            excel.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

效果展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值