首先对jxls做一个简单介绍,这是一个操作可以excel的开源工具组件包。
它依赖于POI、Commons BeanUtils、Commons Collections、Commons
JEXL、Commons Logging、Commons Digester等一些开源工具包。
通过它所依赖的包明 显可以看到他支持 jexl 和 poi 的所有针对excel操作的功能。
具体细节大家可以去它的官方网站了解,这是它的网站地址http://jxls.sourceforge.net/reference/installation.html。
在jxls工具包开发过程中,始终贯穿着一个主题,那就是excel模板,因此excel模板的设置是开发过程中的一个重点,当然它的各项功能方法也是重要的部分。
因为前面的测试开发过程中,常会用到jdbc的一些操作,因此有必要对jxls常用的jdbc操作封装一个工具类。另外,我们既然已经通过jxls解决了绝大多数的针对excel导出的操作,那么我们也可以将这也方法进行进一步封装,写一个新的工具类。只待以后传参调用即可。就不贴出来了,大家自己写吧。
关于导出时弹出excel另存为的实现方案:
写一个jsp页面如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ page language="java" pageEncoding="GBK" contentType="text/html;charset=GBK" isELIgnored="false"%> <%@ page import="java.io.*, com.adam.dev.utils.GUIDGenerator,org.apache.poi.hssf.usermodel.HSSFWorkbook"%> <% String guid = new GUIDGenerator().getGUID(); String fileName = guid.substring(0,14)+".xls"; response.reset(); response.setCharacterEncoding("GBK"); response.setContentType("application/vnd.ms-excel"); //设定文件输出类型 //设定文件展现方式(在线打开【inline】/在线下载【attachment】) response.setHeader("Content-Disposition","attachment;filename="+fileName); HSSFWorkbook workBook = (HSSFWorkbook)request.getSession().getAttribute("workBook"); if(workBook!=null && workBook.getBytes().length>0){ OutputStream os = response.getOutputStream(); workBook.write(os); os.flush(); os.close(); out.clear(); out = pageContext.pushBody(); } %>其中的GUIDGenerator是我自己写的一个工具类,用于生成全局唯一标识的,其实就是时间与随机数等拼接字符串。这里刚好利用到了而已。
当点击按钮导出excel报表时,通过jquery的ajax中的complete回调函数来触发这个页面对应的action配置路径就会弹出导出另存为的对话框。
这是我的js方法:
//点击【打印]】按钮 $('#btnPrint').click(function(){ var url="../subCompany/exportExcel.do"; //alert(url); $.ajax({ url:url, //完成后跳转的页面 complete:function(){ //location.href ="../subCompany/doListQuery.do"; self.location.href="../powerStation/generatorIframe.do"; } }); });大家看看效果:
导出结果: