springboot查询报表数据并导出excel文件

1.页面:

2.需求:

        前端点击导出按钮,将报表数据导出excel

3.编码实现:

3.1引入maven

首先需要引入excel的maven文件:

        <!--excel-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

3.2 创建一个控制层:

 /**
     * 导出excel
     * @param req
     * @param request
     * @param response
     * @return
     */
    @PostMapping("/exportHttp")
    public String daoChu(@RequestBody DataOrderQueryReq req, HttpServletRequest request,HttpServletResponse response){
        //创建excel
        HSSFWorkbook wk = handlerExcelData(new HSSFWorkbook(), req, request);
        try {
            /**
             * 弹出下载选择路径框
             */
            response.setContentType("application/octet-stream");
            response.setHeader("Content-disposition", "attachment;filename=Opinion.xls");//默认Excel名称
            response.flushBuffer();
            wk.write(response.getOutputStream());
            //wk.write(new FileOutputStream("D:/a.xlsx"));
            wk.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {

        }
        return null;
    }
 /**
     * 处理封装好导出的表格数据
     * @param wk
     * @return
     */
    public HSSFWorkbook handlerExcelData(HSSFWorkbook wk,DataOrderQueryReq req,HttpServletRequest request){
        //1. 创建sheet页
        HSSFSheet sheet1 = wk.createSheet();
        sheet1.setColumnWidth(0, 5000);
        HSSFRow row1 = sheet1.createRow(0);
        //2. 创建单元格标题头
        HSSFCell cell1 = row1.createCell((short) 0);
                 cell1.setCellValue("排名");
                 cell1 = row1.createCell((short)1);
                 cell1.setCellValue("城市名称");
                 cell1 = row1.createCell((short)2);
                 cell1.setCellValue("订单數量");
        //3.查询数据并写入到行对象
        List<CityOrderDto> data1=tOrdersService.cityOrders(req,request);
        for (short i=0;i<data1.size();i++){
            row1= sheet1.createRow(i+1);
            row1.createCell(0).setCellValue(data1.get(i).getRanking());
            row1.createCell(1).setCellValue(data1.get(i).getCityName());
            row1.createCell(2).setCellValue(data1.get(i).getOrderNum());
        }
        //-------------------------------------------------------------------------------
        //1. 创建sheet页
        HSSFSheet sheet2 = wk.createSheet();
        sheet2.setColumnWidth(0, 5000);
        HSSFRow row2 = sheet2.createRow(0);
        //2. 创建单元格标题头
        HSSFCell cell2 = row2.createCell((short) 0);
        cell2.setCellValue("订单总数");
        cell2 = row2.createCell((short)1);
        cell2.setCellValue("平均客单价");
        cell2 = row2.createCell((short)2);
        cell2.setCellValue("平均里程价");
        cell2 = row2.createCell((short)3);
        cell2.setCellValue("用户數量");
        cell2 = row2.createCell((short)4);
        cell2.setCellValue("订单总金额");
        //3.查询数据并写入到行对象
        OrderTotalDto data2=tOrdersService.orderTotal(req,request);
        row2= sheet2.createRow(1);
        row2.createCell(0).setCellValue(data2.getOrderTotal());
        row2.createCell(1).setCellValue(data2.getAvgOrderPrice().doubleValue());
        row2.createCell(2).setCellValue(data2.getAvgMileagePrice().doubleValue());
        row2.createCell(3).setCellValue(data2.getUserTotal());
        row2.createCell(4).setCellValue(data2.getOrderTotalPrice().doubleValue());
        //-------------------------------------------------------------------------------
        //1. 创建sheet页
        HSSFSheet sheet3 = wk.createSheet();
        sheet3.setColumnWidth(0, 5000);
        HSSFRow row3 = sheet3.createRow(0);
        //2. 创建单元格标题头
        HSSFCell cell3 = row3.createCell((short) 0);
        cell3.setCellValue("城市名称");
        cell3 = row3.createCell((short)1);
        cell3.setCellValue("订单數量");
        //3.查询数据并写入到行对象
        req.setType("1");
        List<OrderTop10Dto> data3=tOrdersService.orderTop10(req,request);
        for (short i=0;i<data3.size();i++){
            row3= sheet3.createRow(i+1);
            row3.createCell(0).setCellValue(data3.get(i).getCname());
            row3.createCell(1).setCellValue(data3.get(i).getOrderTotal().doubleValue());
        }
        //-------------------------------------------------------------------------------
        //1. 创建sheet页
        HSSFSheet sheet4 = wk.createSheet();
        sheet4.setColumnWidth(0, 5000);
        HSSFRow row4 = sheet4.createRow(0);
        //2. 创建单元格标题头
        HSSFCell cell4 = row4.createCell((short) 0);
        cell4.setCellValue("城市名称");
        cell4 = row4.createCell((short)1);
        cell4.setCellValue("订单金额");
        //3.查询数据并写入到行对象
        req.setType("2");
        List<OrderTop10Dto> data4=tOrdersService.orderTop10(req,request);
        for (short i=0;i<data4.size();i++){
            row4= sheet4.createRow(i+1);
            row4.createCell(0).setCellValue(data4.get(i).getCname());
            row4.createCell(1).setCellValue(data4.get(i).getTotalPrice().doubleValue());
        }
        //-------------------------------------------------------------------------------
        //1. 创建sheet页
        HSSFSheet sheet5 = wk.createSheet();
        sheet5.setColumnWidth(0, 5000);
        HSSFRow row5 = sheet5.createRow(0);
        //2. 创建单元格标题头
        HSSFCell cell5 = row5.createCell((short) 0);
        cell5.setCellValue("企业名称");
        cell5 = row5.createCell((short)1);
        cell5.setCellValue("订单數量");
        cell5 = row5.createCell((short)2);
        cell5.setCellValue("订单金额");
        //3.查询数据并写入到行对象
        List<CustomerOrderDto> data5=tOrdersService.customerOrder(req,request);
        for (short i=0;i<data5.size();i++){
            row5= sheet5.createRow(i+1);
            row5.createCell(0).setCellValue(data5.get(i).getCname());
            row5.createCell(1).setCellValue(data5.get(i).getOrderNum());
            row5.createCell(2).setCellValue(data5.get(i).getOrderTotal().doubleValue());
        }
        //-------------------------------------------------------------------------------
        //1. 创建sheet页
        HSSFSheet sheet6 = wk.createSheet();
        sheet6.setColumnWidth(0, 5000);
        HSSFRow row6 = sheet6.createRow(0);
        //2. 创建单元格标题头
        HSSFCell cell6 = row6.createCell((short) 0);
        cell6.setCellValue("企业名称");
        cell6 = row6.createCell((short)1);
        cell6.setCellValue("用户數量");
        //3.查询数据并写入到行对象
        List<CustomerUserDto> data6=tOrdersService.customerUser(req,request);
        for (short i=0;i<data6.size();i++){
            row6= sheet6.createRow(i+1);
            row6.createCell(0).setCellValue(data6.get(i).getCname());
            row6.createCell(1).setCellValue(data6.get(i).getUserNum());
        }
        //-------------------------------------------------------------------------------
        //1. 创建sheet页
        HSSFSheet sheet7 = wk.createSheet();
        sheet7.setColumnWidth(0, 5000);
        HSSFRow row7 = sheet7.createRow(0);
        //2. 创建单元格标题头
        HSSFCell cell7 = row7.createCell((short) 0);
        cell7.setCellValue("小时");
        cell7 = row7.createCell((short)1);
        cell7.setCellValue("订单數量");
        cell7 = row7.createCell((short)2);
        cell7.setCellValue("订单金额");
        //3.查询数据并写入到行对象
        List<OrderPriceAndNumDto> data7=tOrdersService.OrderPriceAndNumByTimer(req,request);
        for (short i=0;i<data7.size();i++){
            row7= sheet7.createRow(i+1);
            row7.createCell(0).setCellValue(data7.get(i).getHou());
            row7.createCell(1).setCellValue(data7.get(i).getOrderNum());
            row7.createCell(2).setCellValue(data7.get(i).getOrderPrice().doubleValue());
        }
        wk.setSheetName(0,"城市单量热力图");
        wk.setSheetName(1,"统计数据");
        wk.setSheetName(2,"Top10企业订单數量");
        wk.setSheetName(3,"Top10企业订单金额");
        wk.setSheetName(4,"企业订单分析");
        wk.setSheetName(5,"企业用户分析");
        wk.setSheetName(6,"订单数及订单金额(时段)");
        return wk;
    }

4.post测试接口

 5.下载excel展示效果图

 

 

 

 

 

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Spring Boot中,你可以使用多种方法来实现Excel表格的导出。以下是几种常见的方法: 1. 使用Apache POI:Apache POI是一个开源的Java API,用于处理Microsoft Office文档格式,包括Excel电子表格。你可以在Spring Boot中使用Apache POI创建Excel文档,并将其写入HTTP响应中,以实现Excel表格的导出。 2. 使用EasyPOI:EasyPOI是一个开源的Java API,用于处理Excel电子表格。它基于Apache POI和Jxls开发,提供了更加简单易用的API,可以帮助你快速实现Excel表格的导出。 3. 使用Jxls:Jxls是一个用于生成Excel报表Java库。你可以在Spring Boot中使用Jxls创建Excel文档,并将其写入HTTP响应中,以实现Excel表格的导出。 4. 使用第三方库:除了上述方法,还有其他一些第三方的Java库可以用于生成Excel电子表格,例如Aspose.Cells、JExcelApi等。它们也可以在Spring Boot中使用,实现Excel表格的导出。 具体实现的代码和依赖可能会因所选的方法而有所不同。如果你想使用EasyExcel,你可以添加以下依赖到你的项目中: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.1.0</version> <exclusions> <exclusion> <artifactId>poi-ooxml-schemas</artifactId> <groupId>org.apache.poi</groupId> </exclusion> </exclusions> </dependency> ``` 然后,你可以编写代码来实现Excel导出。具体的代码实现因所选方法而异,你可以根据所选的方法查找相应的文档和示例代码来进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Spring Boot 导出excel表格](https://blog.csdn.net/xxt0412/article/details/124949592)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [《springboot中实现excel表格导出》](https://blog.csdn.net/weixin_52236586/article/details/129602624)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值