jxls框架解析(一)报表导出快速入门

jxls是基于POI根据模板开发的一个框架。它在POI上又封装了一层,然后能根据模板快速生成报表,代码简单,结构清晰,下面就来看个例子,包你立马上手。

先来看个javaSE的例子

<span style="white-space:pre">	</span>@Test
	public void TestExcel1(){
		//核心类
		XLSTransformer transformer = new XLSTransformer();
		//需要一个map
		Map map = new HashMap();
		//用来保存student对象的list
		List<Student> student = new ArrayList<Student>();
		Student s = new Student();
		s.setId(0);
		s.setName("jack");
		s.setHobby("eating");
		student.add(s);
		Student s1 = new Student();
		s1.setId(1);
		s1.setName("rose");
		s1.setHobby("swimming");
		student.add(s1);
		Student s2 = new Student();
		s2.setId(2);
		s2.setName("jim");
		s2.setHobby("sleeping");
		student.add(s2);
		Student s3 = new Student();
		s3.setId(3);
		s3.setName("tom");
		s3.setHobby("basketball");
		student.add(s3);
		map.put("student", student);
		try {
			transformer.transformXLS("d:"+File.separator+"student_template.xls", map, "d:"+File.separator+"new.xls");
		} catch (ParsePropertyException e) {
			e.printStackTrace();
		} catch (InvalidFormatException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

我这里是用的junit测试的,也可以把这个方法里的代码copy到main方法里,一样的。

中间一大段只是初始化数据,而核心就一句

transformer.transformXLS("d:"+File.separator+"student_template.xls", map, "d:"+File.separator+"new.xls");

这个方法有三个参数,第一个是Excel模板路径,第二个是一个map,就是你的数据,第三个是要保存的路径。这里比较绕的应该是map,map里面有个list,list里面就是多个student对象,这样是为了在Excel模板里面能够遍历它。


这是模板代码


这里的标签跟jstl的几乎一样,但是在Excel中,一个单元格中只能有一个标签,就是说

<jx:if test="1==1">1==1</jx:if>
不能写在一个单元格中,不然无法解析,之前就因为这个问题弄了我一下午。

模板中第二行的forEach标签,items属性的值就是要遍历的值,这个名字跟map中的key是对应的,var属性的值可以自己命名,为了方便后面调用,它也算是代表遍历的集合中的对象的引用吧。

输出结果


这里用模板的好处就是你可以在模板中定义好样式,它会直接原样输出,不用像POI那样长篇的写代码。


接下来用个javaWEB的,我这里搭的spring+hibernate

@RequestMapping("exportExcel")
	public void exportExcel(HttpServletRequest request,HttpServletResponse response){
		//查出学生信息并放到map中
		List list = studentService.findAll();
		Map<String,Object> beans = new HashMap<String,Object>();
		beans.put("list", list);
		//获得模板路径
		String path=request.getServletContext().getRealPath("/template");
		String srcPath = path+File.separator+"student_template.xls";
		//准备输出流
		OutputStream os=null;
		try {
			//设置响应头
			response.setContentType("application/x-excel");
			//response.setHeader("Content-Disposition", "attachment;filename=studentInfo.xls");
			response.setHeader("Content-Disposition", "attachment;filename="+new String("中文名.xls".getBytes(),"iso8859-1"));
			os = response.getOutputStream();
			XLSTransformer transformer = new XLSTransformer();
			try {
				//获得模板的输入流
				FileInputStream in = new FileInputStream(srcPath);
				//将beans通过模板输入流写到workbook中
				Workbook workbook = transformer.transformXLS(in, beans);
				//将workbook中的内容用输出流写出去
				workbook.write(os);
			}catch (Exception e) {
				e.printStackTrace();
				throw new RuntimeException();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
Excel模板

模板路径


这里的forEach标签是在第一个单元格内的,因为后面没有内容所以才所有内容都显示出来

结果


jxls需要的jar包

jxls-core-1.0.6.jar    jxls-reader-1.0.6.jar    

poi-ooxml-schemas-3.11-20141221.jar   poi-ooxml-3.11-20141221.jar    poi-3.11-20141221.jar    

commons-logging-1.1.1.jar    commons-jexl-2.1.1.jar    commons-digester.jar    commons-beanutils-1.9.2.jar

xmlbeans-2.6.0.jar   

如果需要循环遍历集合则还需要 commons-collections-3.1.jar







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值