java导出Excel文件,直接可以下载,然后更新状态,刷新页面

来源:互联网 发布:mac 鼠标 触摸板 编辑:程序博客网 时间:2024/05/22 16:53

java后端导出excel,首先前台页面只能通过form提交,在后端组成excel文件后,用response直接输出。然后要进行后序操作,例如我这儿,导出的数据状态更新,然后刷新页面。

1jsp页面:

$("#tempForm").submit();//form提交,请求后台的excel做成方法;

var timer1 = setInterval(refeshPage,1000);//每隔一秒判断下cookie是否已经写回,如果写回,则进行页面刷新

function refeshPage(){
 if(getCookie("updateStatus")=="success"){
  clearInterval(timer1);//每隔一秒的判断操作停止
  delCookie("updateStatus");//删除cookie
  $("#mainForm").submit();//页面刷新
 }
}

2java excel做成:

               // 创建Excel文档
                HSSFWorkbook wb = new HSSFWorkbook();
                // sheet 对应一个工作页
                HSSFSheet sheet = wb.createSheet("***");
                HSSFRow firstrow = sheet.createRow(0);
                // 设置单元格类型
                HSSFCellStyle cellStyle = wb.createCellStyle();
                cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平布局:居中
                // 下标为0的行开始
                HSSFCell[] firstcell = new HSSFCell[CountColumnNum];

                 firstcell[0]="";............................//为excel第一行赋值,当作表格表头

                for (short i = 0; i < list.size(); i++) {
                    // 创建电子表格的一行
                    HSSFRow row = sheet.createRow(i + 1);
                    HSSFCell[] cells = new HSSFCell[CountColumnNum];

                    cells[0].setCellValue(i + 1);
                    cells[1].setCellValue(new HSSFRichTextString(“AAA”));//分别为表格内容赋值

                 }

                // 调整列宽
                sheet.autoSizeColumn((short) 1);
                sheet.autoSizeColumn((short) 2);
                sheet.autoSizeColumn((short) 3);
                sheet.autoSizeColumn((short) 4);
                // 创建文件输出流,准备输出电子表格
                response.reset();
                response.setContentType("octets/stream");
                response.addHeader("Content-Disposition", "attachment;filename=" + new String(ENTER_FILE_NAME.getBytes("gb2312"), "ISO8859-1") + "_"

+ StrUtils.getDateStr ()   + ".xls");//设定response的输出格式


                updateLoadStatus(feeIds);//更新导出的数据状态


               //更新完后,设定cookie,用于页面判断更新完成后的标志
                Cookie status = new Cookie("updateStatus","success");
                status.setMaxAge(600);
                response.addCookie(status);//添加cookie操作必须在写出文件前,如果写在后面,随着数据量增大时cookie无法写入。


                OutputStream out = response.getOutputStream();
                wb.write(out);//将生成的excel文件输出
                response.flushBuffer();
                out.close();

注意:(1)添加cookie的位置一定要注意,否则数据量大时,cookie无法写到http里面去;

(2)导出后更新数据,更新完后进行刷新,如果不加标志来判断,更新操作可能慢于刷新操作,导致更新的状态无法在列表页面显示。此处的更新标志是用cookie来保存。页面需要不断查询cookie的状态来做更新


2 0