java 数据导出excel(前后端流导出HttpServletResponse)

1、HttpServletResponse是返回响应数据

2、后端请求接口代码,ExportVo:存放的是查询数据的条件,默认按照查出的数据全部导出

@PostMapping("/export")
    public void export(HttpServletResponse response,ExportVo exportVo) {
        service.export(exportVo,response);
    }

3、创建excel

@Override
    public void assetExport(ExportAssetInfoVo exportAssetInfoVo, HttpServletResponse response) {
	//定义一个新的工作簿
        XSSFWorkbook wb = new XSSFWorkbook();
        //创建一个Sheet页
        XSSFSheet sheet = wb.createSheet();
        XSSFRow row = sheet.createRow(0);//在第一行写入表头信息
        XSSFCell cell = row.createCell(i1);//创建第一行的某列
        cell.setCellValue(headList.get(i1));//向这一列添加数据
        //生成的excel格式按照自己的需求创建出来就行,最终以流的方式写入到工作簿(XSSFWorkbook)就可以
        Date date = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        // 使用项目根目录, 文件名加上时间戳
//        String path = System.getProperty("user.dir") + "\\" + "文件名" + dateFormat.format(date) + ".xlsx";
        String path = dateFormat.format(date);//按照时间给文件起了个名
        try {
            // 输出Excel文件
            OutputStream outputStream = response.getOutputStream();
            // 下面几行是为了解决文件名乱码的问题
            response.setHeader("Content-Disposition", "attachment;filename=" + new String(path.getBytes(), "UTF-8") + ".xlsx");
            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
            response.setHeader("Pragma", "no-cache");//关闭缓存
            response.setHeader("Cache-Control", "no-cache");//关闭缓存
            response.setDateHeader("Expires", 0);//为了让浏览器不要缓存页面,也可以利用Expires实体报关域,设置为0
            wb.write(outputStream);
            wb.close();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
			//也可以在finally关闭流
        }
 }

4、前端获取到HttpServletResponse响应,浏览器自动解析,然后将生成的excel导出来

你可能感兴趣的:(笔记,java,servlet,后端)