SpringBoot -- 页面数据导出Excel表

        有时候页面查询的数据需要做一个导出接口,原则上导出数据需要与页面查询的一致,所以导出的接口入参要和查询列表的入参一致,后台根据入参自行查询数据库,然后再根据输出流写到前端,这样前端就可以获取导出的数据文件。

页面:

      下面图只是打个比方,不作为代码依据

后台:

        控制器

        基本随意,根据自己喜好定url,参数实体至少两个,一个是HttpServletResponse ,另一个就是查询列表参数

    @ApiOperation(value = "导出XX数据明细报表")
    @GetMapping("/exportDetail")
    public void exportDetail(HttpServletResponse response, RequestDTO requestDTO ) {
        xxService.exportDetail(response, requestDTO );
    }

 

        服务类方法exportDetail()

    @Override
    public void exportDetail(HttpServletResponse response, RequestDTO requestDTO ) {
        try {
            long startTime = System.currentTimeMillis();
			//1 获取需要导出数据的集合 FindDetailList方法自行编写,不同业务实现不同
            List<User> data = this.FindDetailList(requestDTO);
			//2 创建ExcelWriter
            ExcelWriter writer = ExcelUtil.getBigWriter();
			//3 设置excel每一列表头,并且表头关联上对应的 User 实体中的参数名
            writer.addHeaderAlias("name","名称");
            writer.addHeaderAlias("sex","性别");
            writer.addHeaderAlias("age","年龄");
            writer.setOnlyAlias(true);
            writer.write(data,true);
			//4 设置excel表对应列的宽度(非必要)
            writer.setColumnWidth(0, 20);
            writer.setColumnWidth(1, 20);
            writer.setColumnWidth(2, 20);
			//5 设置excel表名,编码等基础信息
            response.setCharacterEncoding("UTF-8");
            response.setHeader("content-Type", "application/vnd.ms-excel");
            response.setHeader("Content-Disposition",
                    "attachment;filename=\"" + URLEncoder.encode("XX明细报表" + "-" + LocalDate.now() + ".xlsx", "UTF-8") + "\"");
            ServletOutputStream out=response.getOutputStream();
            writer.flush(out, true);
            writer.close();
            log.info("导出XX明细报表耗时{}ms", System.currentTimeMillis() - startTime);
        }catch (Exception e){
            log.error("XX明细报表导出异常!",e);
        }
    }

       

至此代码完成,可直接用api工具测试。

测试:

可以看到返回一堆乱码 ,影响不大,点左上方的下载按钮即可下载(如果是网页调用会直接到下周的小窗口) 

完成 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
你可以参考以下代码实现: 1. 在pom.xml文件中添加以下依赖: ``` <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> ``` 2. 创建一个Controller,实现导出Excel的功能: ``` @RequestMapping("/export") public void export(HttpServletResponse response) throws Exception { // 1. 创建一个Excel文件 Workbook workbook = new XSSFWorkbook(); // 2. 创建一个工作 Sheet sheet = workbook.createSheet("Sheet1"); // 3. 创建头 Row header = sheet.createRow(); header.createCell().setCellValue("姓名"); header.createCell(1).setCellValue("年龄"); header.createCell(2).setCellValue("性别"); // 4. 填充数据 List<User> userList = userService.getUserList(); int rowNum = 1; for (User user : userList) { Row row = sheet.createRow(rowNum++); row.createCell().setCellValue(user.getName()); row.createCell(1).setCellValue(user.getAge()); row.createCell(2).setCellValue(user.getGender()); } // 5. 设置响应头 response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=user.xlsx"); // 6. 输出Excel文件 OutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); outputStream.flush(); outputStream.close(); } ``` 3. 在前端页面中使用ajax请求导出Excel: ``` $.ajax({ url: "/export", type: "GET", success: function() { alert("导出成功!"); }, error: function() { alert("导出失败!"); } }); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值