jsp数据导出excel
jsp实现数据的导出到excel,以form提交的方式,将数据流输出来,在浏览器中,提示下载文件,同时制定文件保存的地址。
如图(1)
实现步骤:
1.前台提交数据到Action中,然后action组合数据,将要导出的数据,通过jxl写入数据流中
2.js提交方式:
js创建form表单,添加所需要的参数,然后提交form,
实现代码如下:
/**
* 自定义:文件下载操作
* @author 2559868858
* @date 2012-10-01
* @param url 请求提交地址
* @param keyArr 参数的名称,数组
* @param valueArr 参数名称对应的数值
*/
function $fileDownLoad(url,keyArr,valueArr){
var elemIF = document.getElementById('downloadFrame');// 创建iframe
if(!elemIF){
elemIF = document.createElement("iframe");
elemIF.setAttribute('id','downloadFrame');
elemIF.hidden = true;
document.body.appendChild(elemIF);
}
// iframe的document对象
var ifrdoc;
if(elemIF.contentDocument){
ifrdoc = elemIF.contentDocument;
}else if(elemIF.contentWindow){
ifrdoc = elemIF.contentWindow.document;
}else{
ifrdoc = elemIF.document;
}
// end iframe的document对象
if(ifrdoc.document){
ifrdoc=ifrdoc.document;
}
var body=ifrdoc.body;
if(!body){
ifrdoc.write("<head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'></head>");
body=ifrdoc.createElement('body');
ifrdoc.appendChild(body);
}
var elemForm = ifrdoc.getElementById('downloadForm');
//if exist then remove
if(elemForm){
ifrdoc.body.removeChild(elemForm);
}
//创建form表单,添加要使用的参数
elemForm=ifrdoc.createElement("form");
elemForm.id='downloadForm';
ifrdoc.body.appendChild(elemForm);
// var url = gridObj.store.proxy.url; // 获取请求的地址
// start 添加请求的参数
if(keyArr != null && keyArr != undefined && keyArr.length > 0){
for(var i=0;i<keyArr.length;i++){ // 在form表单中添加hidden保存参数
var elmObj = ifrdoc.createElement("input");
elmObj.type = "hidden";
elmObj.name = keyArr[i];
elmObj.value = valueArr[i];
elemForm.appendChild(elmObj);
}
}
// end 添加请求的参数
// start 添加自定义导出标示
var elmObj = ifrdoc.createElement("input");
elmObj.type = "hidden";
elmObj.name = 'isExport';
elmObj.value = 'true';
elemForm.appendChild(elmObj);
// end 添加自定义标示
// 表单提交fileDownLoad
elemForm.method = 'post';
elemForm.action = url;
elemForm.submit();
};
3.将数据流在jsp页面上输出来,
response.setContentType("application/x-msdownload");
response.setHeader("content-disposition", "attachment; filename=" + path + ".xls");
OutputStream customOs = response.getOutputStream();
ToExcelUtil toExcel = new ToExcelUtil();
toExcel.createTable(customOs, header, body);
// end 导出excel
out.clear();
out = pageContext.pushBody();
3.实现上面效果