您的位置:首页 > 其它

ZK框架简介,以及在ZK下使用JXL读取Excel模板,导出数据模型到Excel的方法

2012-03-29 00:17 1281 查看
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模板来生成。示例代码如下:

/**
* 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();
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐