使用POI生成Excel并进行流下载(不需在服务器上保存)

public JsonResponse export(HttpServletRequest request, HttpServletResponse response, LoginModel loginModel) {
        JsonResponse jr = new JsonResponse();
        jr.setSuc(JsonResponse.FAIL);
        //loginModel.setOperateResult("");
        List<Login> dataList = loginSevice.queryAll(loginModel);
        // 第一步,创建一个webbook,对应一个Excel文件
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
        HSSFSheet sheet = workbook.createSheet("登陆日志");
        // 第三步,在sheet中添加表头第0行
        HSSFRow row = sheet.createRow(0);
        // 第四步,创建单元格,并设置值表头 设置表头居中
        HSSFCellStyle style = workbook.createCellStyle();
        // 创建一个居中格
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        row.createCell(0).setCellValue("执行者");
        row.createCell(1).setCellValue("用户名");//I18NUtil.getMessage(request, "employee.label.employee.id")
        row.createCell(2).setCellValue("操作结果");
        row.createCell(3).setCellValue("请求IP");
        row.createCell(4).setCellValue("执行时间");

        //设置表头居中
        row.getCell(0).setCellStyle(style);
        row.getCell(1).setCellStyle(style);
        row.getCell(2).setCellStyle(style);
        row.getCell(3).setCellStyle(style);
        row.getCell(4).setCellStyle(style);

        //设置列宽
        sheet.setColumnWidth(0, 4000);
        sheet.setColumnWidth(1, 4000);
        sheet.setColumnWidth(2, 3000);
        sheet.setColumnWidth(3, 4000);
        sheet.setColumnWidth(4, 6000);


        //格式化日期 pattern
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 第五步,写入实体数据
        for (int i = 0; i < dataList.size(); i++) {
            row = sheet.createRow(i + 1);
            // 第六步,创建单元格,并设置值
            row.createCell(0).setCellValue(dataList.get(i).getName() == null? "": dataList.get(i).getName());
            row.createCell(1).setCellValue(dataList.get(i).getUserName());
            row.createCell(2).setCellValue(dataList.get(i).getOperateResult());
            row.createCell(3).setCellValue(dataList.get(i).getIpAddr());
            row.createCell(4).setCellValue(format.format(dataList.get(i).getLoginTime()));

        }
        String downFileName = new String("登陆日志.xls");
        try {
            //若不进行编码在IE下会乱码
            downFileName = URLEncoder.encode(downFileName, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        try {
            // 清空response
            response.reset();
            response.setContentType("application/msexcel");//设置生成的文件类型
            response.setCharacterEncoding("UTF-8");//设置文件头编码方式和文件名
            response.setHeader("Content-Disposition", "attachment; filename=" + new String(downFileName.getBytes("utf-8"), "ISO8859-1"));
            OutputStream os=response.getOutputStream();
            workbook.write(os);
            os.flush();
            os.close();
        } catch (IOException e) {
            Admin admin = CurrentAdminUtil.getCurrentAdmin(request);
            e.printStackTrace();
            LOGGER.error(admin.getUsername() + "[" + admin.getName() + "]导出登陆日志报表失败", e);
            return jr;
        }
        jr.setSuc(JsonResponse.SUCCESS);
        jr.setRet("");
        return  jr;
    }
PS:使用Ajax请求流下载失效,使用表单提交流下载正常,原因未知
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值