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 = ("***");
HSSFRow firstrow = (0);
// 设置单元格类型
HSSFCellStyle cellStyle = ();
(HSSFCellStyle.ALIGN_CENTER); // 水平布局:居中
// 下标为0的行开始
HSSFCell[] firstcell = new HSSFCell[CountColumnNum];
firstcell[0]="";............................//为excel第一行赋值,当作表格表头
for (short i = 0; i < (); i++) {
// 创建电子表格的一行
HSSFRow row = (i + 1);
HSSFCell[] cells = new HSSFCell[CountColumnNum];
cells[0].setCellValue(i + 1);
cells[1].setCellValue(new HSSFRichTextString(“AAA”));//分别为表格内容赋值
}
// 调整列宽
((short) 1);
((short) 2);
((short) 3);
((short) 4);
// 创建文件输出流,准备输出电子表格
();
("octets/stream");
("Content-Disposition", "attachment;filename=" + new String(ENTER_FILE_NAME.getBytes("gb2312"), "ISO8859-1") + "_"
+ () + ".xls");//设定response的输出格式
updateLoadStatus(feeIds);//更新导出的数据状态
//更新完后,设定cookie,用于页面判断更新完成后的标志
Cookie status = new Cookie("updateStatus","success");
(600);
(status);//添加cookie操作必须在写出文件前,如果写在后面,随着数据量增大时cookie无法写入。
OutputStream out = ();
(out);//将生成的excel文件输出
();
();
注意:(1)添加cookie的位置一定要注意,否则数据量大时,cookie无法写到http里面去;
(2)导出后更新数据,更新完后进行刷新,如果不加标志来判断,更新操作可能慢于刷新操作,导致更新的状态无法在列表页面显示。此处的更新标志是用cookie来保存。页面需要不断查询cookie的状态来做更新