jsp将table导出成excel+用js将table导出excel,中文乱码问题解决方案+action层导出excel

由于产品升级,居然把以前extjs用的grid被替换成table了。。。郁闷。。。

但还要保留导出功能,没办法,只能研究。


开始我以为通过js可以完成这项任务,代码也查到了,但是它的导出结果是直接用excel打开此table,与预想的不一样:预想的是弹出框,询问用户是下载还是直接打开。

后来想了想,觉得js是运行在客户端的,所以要实现这个下载功能应该不太现实。。于是放弃用js,查新的方法:

最终,我的解决方法是,在action中通过一系列的处理,最终返回一个页面,而这个页面中,body里只有一个table,然后把这个文件的传输格式改变,最终达到目的。


先把用js直接在excel中把table打开的代码贴上来,也许日后会用上:

<script language=javascript>  
function tableToExcel() {   
window.clipboardData.setData("Text",document.all('table1').outerHTML);  
try 
{  
var ExApp = new ActiveXObject("Excel.Application")  
var ExWBk = ExApp.workbooks.add()  
var ExWSh = ExWBk.worksheets(1)  
ExApp.DisplayAlerts = false 
ExApp.visible = true 
}    
catch(e)  
{  
alert("您的电脑没有安装Microsoft Excel软件!")  
return false 
}   
 ExWBk.worksheets(1).Paste;   
 }  
</script>

用这个时要注意两点,在有的浏览器版本上,直接运行这段代码会报automation服务器不认识对象这个错误(大概是这个,昨天晚上在家里时出现的)

解决方法:把ie的安全项中用自定义:对"未识别的activeX控件"改为启用(大概是这个吧,具体名字也忘了)


比较简单吧。。下面说说用jsp导出:


这个其实更简单,只需要在生成table的页面前,加上

<%
response.setContentType("application/msexcel;charset=GBK");
response.setHeader("Content-disposition", "attachment; filename=excelname.xls"); 
%>


就好了。。。

要注意两点:1.生成的excel中可能没有边框,所以要在jsp的table中,加上border="1"

  2.对于中文,会有乱码。

我尝试了几种方式,最终发现把所有编码都改为gbk就可以了(其他页面都用的Utf-8)



<%@ page contentType="text/html; charset=GBK"%>


response.setContentType("application/msexcel;charset=GBK");
response.setHeader("Content-disposition", "attachment; filename=excelname.xls"); 


注意:下面这句话也要加上:

<meta content="text/html;charset=GBK" http-equiv="Content-Type">

之所以像上面这样做(有些麻烦),是因为最终生成的table不是一个实体类的集合,而是一个dto对象的集合。所以如果用后台再去取,再转化,有些麻烦。



Action层导出:

如果直接是某个实体类对象的集合,用下面这种方法来生成excel也是可以的。

public void exportForm(){

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值