使用jxl动态生成excel文件并提示下载

根据项目需求,需要在页面动态到处excel文件。导出excel主要有两类方法: 
(1)使用POI,JXL的API自己写。 
(2)使用列表组件,如displaytag,ecside等。 
我试着用了jxl和displaytag。不难,挺好玩的。且记些资料、心得在这里。 
(1)用jxl API 
jxl的doc很完善,尤其是里面的demo,简单的应用参考demo的相关文件,就可照猫画虎。在struts+spring+hibernate的架构中,可以定义一个非持久化类,用来存放包含若干字段的查询结果。jxl导出一个excel文件的步骤很reasonable。先根据输出流建立一个WritableWorkbook对象wwb;excel文件中的每一个sheet,在wwb中都对应一个WritableSheet对象,然后,对于每一个WritableSheet对象,再逐个填写cell数据。其间,可以根据填写内容的类型选择填写方式,还可以灵活的设置字体等格式信息。 
倘若需求只要求客户点击“导出”时,弹出对话框,提示文件并下载,且此文件是动态生成,不用在服务器端事先保存的话,用jxl的API可以很方便灵活的实现。在http://www.blogjava.net/netnova/archive/2007/09/20/146776.html中有很好的例子。对于中文字符的文件名乱码问题,只需使用java中的一般解决办法,new String(filename.getBytes(),"iso8859-1");作为新的文件名即可。文件内容一般不会出现中文乱码。 
(2)用displaytag 
列表组件在实现excel导出时,也是用了POI或者JXL。使用列表组件有一个前提:就是无论列表显示还是excel文件导出,都要使用这个组件。这个对于只需导出文件的需求当然不适用。但如果要同时实现两项功能,且系统中没有专门的分页处理逻辑的话,使用列表组件是个不错的选择。我花了不多的时间试了试displaytag。对于action的编写,与一般的列表显示没什么区别,action要做的只是把要显示的对象信息一并放在request的attribute里。主要工作是在jsp页面中使用displaytag标签,把对应的信息按照一定的排列显示出来。它可以方便的设置需要导出哪些数据,到处文件的类型等。对于中文乱码问题,这里的解决就不似jxl那么简单了。我使用最新版本的displaytag,尽管用了它说的filter,但导出的文件内容中的中文字符还是乱码。看了下文档,说一般支持ascii码的excel导出。应该也支持非ascii码的导出吧。估计是我还没看得足够深入。不过,displaytag中提供的几个默认样式不错,在显示列表时可以省掉一些工作。 

你可能感兴趣的:(使用jxl动态生成excel文件并提示下载)