ZK框架简介,以及在ZK下使用JXL读取Excel模板,导出数据模型到Excel的方法
J2EE世界有这很多无需美工,无需JS就能做出管理系统的技术,Flex算是一种,也比较有名。另外还有一个就是ZK框架,我只能用两个字形容这玩意儿:神器。相比Flex,ZK无需学习任何脚本语言,完全是使用XML进行界面布局,JAVA进行服务器端的脚本生成,通过AJAX将脚本传递到浏览器端,然后执行。第一次接触ZK源自我们公司一个创新项目,当时要从苏州公司那边复制一个CDMA的团购系统过来,源代码都是苏州公司的,我们只需要根据本地的Oracle配置一下就行了,这套系统就是采用ZK框架开发的,于是我一发不可收地爱上了这套框架。ZK框架的门槛可以说相当低,使用ZK,你无须学习HTML,CSS,DIV,JS,Struts,你只需会JAVA就能够开发出界面不错的J2EE WEB应用。
介绍这么多ZK的背景知识就是想让大家去他的官网看看,ZK能做的东西相当多。
最近在对一个ZK的遗留系统进行改造(为此我们的jPress进度稍微放缓一下,毕竟客户是给了钱的),根据客户的要求要对订单列表进行导出和打印,于是想到了用JXL或者POI进行Excel的导出。一般情况下JXL用的比较多,前几个小项目都是用的JXL对数据进行excel导出,poi是个重量级的工具,对Microsoft Office的excel,word甚至pdf进行了高强度的集成,能实现很多复杂的功能,并且最新版本部分支持了最新的office2007格式。POI功能强大,可惜一般用不到,而且JAR体积也很大,POI一个jar包就能抵得上我们整个项目文件大小,所以这次还是使用JXL来进行数据的导出。
功能很简单,点击ZK的一个button按钮,将容器中分页显示的订单详情导出到excel。示例中使用ByteArrayOutputStream产生内存中的字节输出流,然后从内存中的字节流中获取字节码形成输出流,通过或输出流构造excel文件到客户端,所以并不需要在服务器端生成任何文件。此外本节示例并不是构造全新的excel文件,而是根据已有的excel模板来生成。示例代码如下:
介绍这么多ZK的背景知识就是想让大家去他的官网看看,ZK能做的东西相当多。
最近在对一个ZK的遗留系统进行改造(为此我们的jPress进度稍微放缓一下,毕竟客户是给了钱的),根据客户的要求要对订单列表进行导出和打印,于是想到了用JXL或者POI进行Excel的导出。一般情况下JXL用的比较多,前几个小项目都是用的JXL对数据进行excel导出,poi是个重量级的工具,对Microsoft Office的excel,word甚至pdf进行了高强度的集成,能实现很多复杂的功能,并且最新版本部分支持了最新的office2007格式。POI功能强大,可惜一般用不到,而且JAR体积也很大,POI一个jar包就能抵得上我们整个项目文件大小,所以这次还是使用JXL来进行数据的导出。
功能很简单,点击ZK的一个button按钮,将容器中分页显示的订单详情导出到excel。示例中使用ByteArrayOutputStream产生内存中的字节输出流,然后从内存中的字节流中获取字节码形成输出流,通过或输出流构造excel文件到客户端,所以并不需要在服务器端生成任何文件。此外本节示例并不是构造全新的excel文件,而是根据已有的excel模板来生成。示例代码如下:
/** * TODO:使用ONGL表达式对JXL进行封装,设计excel模板引擎 * http://cuihongxin1030.iteye.com/blog/410411 */ @SuppressWarnings("static-access") public void onClick$btn_exportDetial(){ Filedownload f=new Filedownload(); try { String path=this.getClass().getResource("/detail.xls").toURI().getPath(); Workbook wb=Workbook.getWorkbook(new File(path)); ByteArrayOutputStream bos=new ByteArrayOutputStream(); WritableWorkbook wwb=Workbook.createWorkbook(bos,wb); WritableSheet wws = wwb.getSheet(0); ((jxl.write.Label)wws.getWritableCell(1, 1)).setString(this.unitOrder.getCustomer().getName()); //姓名 ((jxl.write.Label)wws.getWritableCell(1, 2)).setString(this.unitOrder.getCustomer().getIdentifyId()); //身份证号码 ((jxl.write.Label)wws.getWritableCell(1, 3)).setString(this.unitOrder.getCustomer().getLinkNumber()); //联系号码 ((jxl.write.Label)wws.getWritableCell(1, 4)).setString(this.unitOrder.getCustomer().getAddress()); //地址 ((jxl.write.Label)wws.getWritableCell(1, 6)).setString(this.unitOrder.getCar()); //车型 ((jxl.write.DateTime)wws.getWritableCell(1, 7)).setDate(this.unitOrder.getCreateDt()); //订购时间 ((jxl.write.Label)wws.getWritableCell(1, 8)).setString(this.unitOrder.getStatus()); //状态 ((jxl.write.Label)wws.getWritableCell(1, 11)).setString(this.unitOrder.getFactoryOrder().getProvider().getName()); //经销商 ((jxl.write.Number)wws.getWritableCell(1, 13)).setValue(this.unitOrder.getOriginalPrice()); //进价 ((jxl.write.DateTime)wws.getWritableCell(1, 14)).setDate(this.unitOrder.getFactoryOrder().getOrderDt()); //经销商订车时间 ((jxl.write.Number)wws.getWritableCell(1, 15)).setValue(this.unitOrder.getFactoryOrder().getFrontMoney()); //经销商定金 ((jxl.write.Label)wws.getWritableCell(1, 16)).setString(this.unitOrder.getFactoryOrder().getStatus()); //经销商状态 ((jxl.write.Label)wws.getWritableCell(1, 17)).setString(this.unitOrder.getFactoryOrder().getRemark()); //经销商备注 ((jxl.write.Label)wws.getWritableCell(4, 1)).setString(this.unitOrder.getSaleStaff().getStaffName()); //销售员 ((jxl.write.Number)wws.getWritableCell(4, 2)).setValue(this.unitOrder.getSalePrice()); //售价 wws.addCell(new jxl.write.Label(3,i,"净利润",wcf1)); //利润 WritableCellFormat wcf2=new WritableCellFormat(); wcf2.setBorder(Border.ALL, BorderLineStyle.THIN); WritableFont wf=new WritableFont(WritableFont.ARIAL,14,WritableFont.BOLD); wf.setColour(jxl.format.Colour.RED); wcf2.setFont(wf); wws.addCell(new jxl.write.Number(4,i++,this.unitOrder.getProfit(),wcf2)); wwb.write(); wwb.close(); wb.close(); f.save(bos.toByteArray(),"application/vnd.ms-excel", "data.xls"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
posted on 2012-03-29 00:17 newflypig 阅读(1079) 评论(7) 编辑 收藏 举报