jsp页面表格数据导出到excel

时间:2021-10-20 17:08:39
在程序猿的日常工作中经常会遇到这样的问题,如何将jsp页面表格中的数据导出到excel中?

我所知道的第一种方法是

<script type="text/javascript">
function method1(tableid) {//整个表格拷贝到EXCEL中
var curTbl = document.getElementByIdx_x(tableid);
var oXL = new ActiveXObject("Excel.Application");
//创建AX对象excel
var oWB = oXL.Workbooks.Add();
//获取workbook对象
var oSheet = oWB.ActiveSheet;
//激活当前sheet
var sel = document.body.createTextRange();
sel.moveToElementText(curTbl);
//把表格中的内容移到TextRange中
sel.select();
//全选TextRange中内容
sel.execCommand("Copy");
//复制TextRange中内容
oSheet.Paste();
//粘贴到活动的EXCEL中
oXL.Visible = true;
//设置excel可见属性
}
</script>

不过这种方式的局限性很大,火狐和谷歌浏览器基本上就等于废了,而且ie使用时还要修改安全性设置,这是很不方便的。
除此之外还可以采取下面这种方式:在jsp页面的头部加上这么一段:

<% 
String wjm="student.xls";
response.setContentType( "application/vnd.ms-excel;charset=gbk");
response.setHeader("content-disposition","attachment; filename=" +wjm );
%>

wjm是你所要导出的excel表格的名字,使用这种方法,当你打开一个链接指向该页面时,浏览器就会提示下载excel表格,你就可以以excel的形式保存到本地了。这种方式可以适用于各种浏览器,只是这样你无法在当前页面看到数据表格的内容,因为你打开该页面就直接提示下载了。怎么解决这个问题呢?我是这么解决的:

<a href="showUser.jsp">点击导出通讯录</a>
<jsp:include page="showUser.jsp"></jsp:include>

这样你就可以在当前页面看到包含表格的那个页面,而且点击链接时就可以下载了。
有时候我们所要包含进来的页面是用过struts的action处理过返回的页面,如果直接包含action所指向的页面的话,可能在页面上只能看到表头部分而没有数据了,这又该怎么处理呢?
我想到的是使用ajax的方式:

function init(){
$(function(){
$.ajax({
'async': false,
type : "post",
url :"showUser.action",
success : function(msg) {
$("#result").html(msg);
}
});
});
}
<body onload="init()">
<a href="showUser.action">点击导出通讯录</a>
<div id="result"></div>
</body

这样处理当页面加载时就会先到后来请求数据,然后把得到的数据通过ajax的方式放入自己设定的div中,这样问题便得到了解决。
上述的这些方法只能处理一般的数据表格,即你希望保存的excel表格和你在页面看到的样式一致,你可以采取上面的方法,因为上面的方法会将页面上的东西全部拷贝到excel中,页面会很不美观,如果你需要处理的表格非常复杂的话可以使用poi,这是一个专门处理office导出导入的jar包,具体事例可以参考该项目 POI插件表格导出案例