jxls框架解析(一)报表导出快速入门
2015-02-05 16:31
369 查看
jxls是基于POI根据模板开发的一个框架。它在POI上又封装了一层,然后能根据模板快速生成报表,代码简单,结构清晰,下面就来看个例子,包你立马上手。
先来看个javaSE的例子
我这里是用的junit测试的,也可以把这个方法里的代码copy到main方法里,一样的。
中间一大段只是初始化数据,而核心就一句
这个方法有三个参数,第一个是Excel模板路径,第二个是一个map,就是你的数据,第三个是要保存的路径。这里比较绕的应该是map,map里面有个list,list里面就是多个student对象,这样是为了在Excel模板里面能够遍历它。
这是模板代码
这里的标签跟jstl的几乎一样,但是在Excel中,一个单元格中只能有一个标签,就是说
模板中第二行的forEach标签,items属性的值就是要遍历的值,这个名字跟map中的key是对应的,var属性的值可以自己命名,为了方便后面调用,它也算是代表遍历的集合中的对象的引用吧。
输出结果
这里用模板的好处就是你可以在模板中定义好样式,它会直接原样输出,不用像POI那样长篇的写代码。
接下来用个javaWEB的,我这里搭的spring+hibernate
模板路径
这里的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
先来看个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
相关文章推荐
- CI框架快速入门2--执行流程图解析
- jello框架快速入门
- 流行Java开源数据库框架项目 - Hibernate快速简单入门
- JSON 超级快速入门 完 搭建一个超级不规范的REST框架
- Dojo Quick Start Guide 快速入门 基本框架
- Dojo QuickStart 快速入门教程 (4) 简单的测试框架
- Microsoft .Net 框架 SDK 快速入门教程
- Model-Glue:Flex框架快速入门
- Quartz 框架快速入门(四)
- Quartz 框架快速入门(三)
- 水晶报表基础入门——7.晶报表导出数据技术1
- ADO.NET Entity Framework Beta2(五)/快速入门(实体框架)
- Microsoft .Net 框架 SDK 快速入门教程
- [翻译]ADO.NET Entity Framework Beta2(九)/快速入门(实体框架)(4)/查询实体及关系
- Quartz 框架快速入门(四)
- JAVA框架三剑客 - Struts+Spring+Hibernate快速入门
- [翻译]ADO.NET Entity Framework Beta2(八)/快速入门(实体框架)(3)/生成学校实体数据模型
- Quartz 框架快速入门(一)
- 调度框架Quartz快速入门
- 矢量文字渲染引擎FreeType快速入门,附字体文件解析范例