JXLS 2.4.0系列教程(二)——循环导出一个链表的数据
请务必先看上一篇文章,本文在上一篇文章的代码基础上修改而成。
上一篇文章我们介绍了JXLS和模板导出最简单的应用,现在我们要更进一步,介绍在模板中循环导出链表中的数据,在日常开发中,循环导出应该才是最常用的功能吧!
首先,我们要建立一个类模拟javabean对象。我们定义一个person类,里面有id,name和age。
- public class Person {
- String id;
- String name;
- Integer age;
- public Person(String id, String name, Integer age) {
- super();
- this.id = id;
- this.name = name;
- this.age = age;
- }
- public Person() {
- }
- /** 以下省略了对应的get/set方法,请自行补齐 */
- }
然后我们修改main 方法,大体上和上一篇文章是一致的,只是模拟了从数据库取出javabean的过程,将取出的javabean对象放入model中,然后传给JxlsUtils。
- public class TestMain {
- public static void main(String[] args) throws Exception {
- // 模板位置,输出流
- String templatePath = "E:/template2.xls";
- OutputStream os = new FileOutputStream("E:/out.xls");
- // 一个装有对象数据的链表
- List<Person> persons = new ArrayList<Person>();
- Person p1 = new Person("001", "张三", 18);
- Person p2 = new Person("002", "李四", 19);
- Person p3 = new Person("003", "王五", 20);
- persons.add(p1);
- persons.add(p2);
- persons.add(p3);
- Map<String, Object> model = new HashMap<String, Object>();
- model.put("person", persons); // 把链表放进model中
- JxlsUtils.exportExcel(templatePath, os, model);
- os.close();
- System.out.println("完成");
- }
- }
接下来我们设计模板:
A1单元格(A1到C1合并单元格,名字还是A1)中的注释:jx:area(lastCell="D4"),不用多讲划定模板的区域范围。依照上文讲的避免bug的原因,我们依然将区域范围设置成比模板内容至少大一圈。需要说明的是注释必须在左上角的A1中,但是可以在和A1合并后的单元格中。
A3单元格的注释:jx:each(items="person" var="p" lastCell="C3"):
jx:each() 这是一个遍历注释,默认向下增加一行。官网写可以横向遍历(增加direction 参数),我没有试过。
Items= 从java代码中传入的model的键值对中取出键名为“person”的对象,这个对象可以是集合,一般是链表。
Var= 每一条记录的变量名,命名为p。
lastCell= 遍历数据在模板中最后一个单元格的位置。
然后在遍历的区域内写上${ } 表达式,以var中定义的变量名 . 传进来的对象属性为构成。
然后保存模板,执行java代码,就能看到下图的结果了。
我们再来测试下复杂一点的模板呢?
遍历的模板有两行,而且开头一列为合并的单元格,遍历模板第二行为有底纹的单元格,看看整个表格生成后会不会崩掉?我试过几个模板导出插件,很多都是单行遍历模板没问题,一旦出现多行数据和带有合并的单元格整个模板就会崩掉。
没毛病,完美。
最后说一点:如果lastCell的参数的值要设定为一个合并后的单元格,你不知道这个合并后的单元格名字是什么,那就用鼠标点一下该单元格,excel左上角会显示这个合并单元格的名称的,就写这个名字就行。
例如上图001所在的合并单元格,用数据点击后excel提示的单元格名称为A3,其实写A3,A4都行。
2018-08-07 新增:
还有一种用法,就是横向遍历显示list的数据。其实很简单,jx:each的注释里只要写direction="RIGHT"就行了。
jx:each(items="data" var="dat" lastCell="A3" direction="RIGHT")
具体参照下图,我就不写代码了,都一样,只是模板的不同而已。
JXLS 2.4.0系列教程(二)——循环导出一个链表的数据的更多相关文章
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级) 本章介绍的是企业库加密应用程序模块 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级)
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级) 企业库加密应用程序模块提供了2种方 ...
- JXLS 2.4.0系列教程(一)——最简单的模板导出
Java中实现excel根据模板导出数据的方法有很多,一般简单的可以通过操作POI进行.还可以使用一些工具很轻松的实现模板导出.这些工具现在还在维护,而且做得比较好的国内的有easyPOI,国外的就是 ...
- JXLS 2.4.0系列教程(五)——更进一步的应用和页面边距bug修复
注:本文代码建立于前面写的代码.不过不看也不要紧. 前面的文章把JXLS 2.4.0 的基本使用写了一遍,现在讲讲一些更进一步的使用方法.我只写一些我用到过的方法,更多的高级使用方法请参考官网. ht ...
- JXLS 2.4.0系列教程(四)——多sheet是怎么做到的
注:本文代码在第一篇文章基础上修改而成,请务必先阅读第一篇文章. http://www.cnblogs.com/foxlee1024/p/7616987.html 本文也不会过多的讲解模板中遍历表达式 ...
- JXLS 2.4.0系列教程(三)——嵌套循环是怎么做到的
注:本文代码在第一篇文章基础上修改而成,请务必先阅读第一篇文章. http://www.cnblogs.com/foxlee1024/p/7616987.html 本文也不会过多的讲解模板中遍历表达式 ...
- JXLS 2.4.0系列教程(六)番外篇——导出图片(完结)
突然想起来有同学说过能不能导出图片,本来我是想说不懂的,后来我上官网查了查,还挺容易.我就简短的写一写怎么导出图片. 官方提供了导出图片标签: jx:image(lastCell="D10& ...
- JXLS 2.4.0系列教程(四)——拾遗 如何做页面小计
注:阅读本文前,请先阅读第四篇文章. http://www.cnblogs.com/foxlee1024/p/7619845.html 前面写了第四篇教程,发现有些东西忘了讲了,这里补回来. 忘了讲两 ...
- Enterprise Library 5.0 系列教程
1. Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (初级) 2. Microsoft Enterprise L ...
随机推荐
- [置顶]
MVC输出缓存(OutputCache参数详解)
1.学习之前你应该知道这些 几乎每个项目都会用到缓存,这是必然的.以前在学校时做的网站基本上的一个标准就是1.搞定增删改查2.页面做的不要太差3.能运行(ps真的有这种情况,答辩验收的时候几个人在讲台 ...
- 向map中追加元素
public class Demo01 { public static void main(String[] args) { String mapKey = "a"; Map< ...
- php实现socket推送技术
在socket出现之前已经有ajax定时请求.长轮询等方案,但都不能满足需求,socket就应用而生了. socket基本函数socket 总结下常用的socket函数 服务端: socket_cre ...
- 我 对jvm 创建线程的一些了解
1.jvm 每创建一个线程都会对应产生一个该线程的虚拟机栈,栈大小通过-Xss参数来设置,JDK1.5之后默认为1M 2.JVM创建线程需要内存,但这部分内存不使用堆内存(毕竟JVM虚拟机栈).对于3 ...
- Python列表操作
自带帮助文档: >>> help(list) Help on class list in module builtins: class list(object) | list() - ...
- js获取样式、currentStyle和getComputedStyle的兼容写法
currentStyle获取计算后的样式,也叫当前样式.最终样式.优点:可以获取元素的最终样式,包括浏览器的默认值,而不像style只能获取行间样式,所以更常用到.注意:不能获取复合样式如backgr ...
- 关于php中,记录日志中,将数组转为json信息记录日志时遇到的问题总结
1 中文编码化,无法看到具体的中文,如:你好 => \u4F60\u597D 解决方案:可以使用 json_encode($arr,JSON_UNESCAPED_UNICODE) 转义中文[ ...
- 转: 谈JAVA_OPTS环境变量不起作用
谈JAVA_OPTS环境变量不起作用 2016-6-14 11:12 最近在处理运行一个java应用时,老是出现java.lang.OutOfMemoryError: Java heap space. ...
- Javascript一句代码实现JS字符串去除重复字符
需求: 原字符串:abcdabecd 去重后字符串:abcde JS字符串去重,一个简单需求,网上找案例发现都是一大堆代码,对于强迫症的我 实再无法忍受,于是自己手动写出一段代码,完美解决该问题. 代 ...
- es5预览本地文件、es6练习代码演示案例
es6简单基础: <!DOCTYPE html> <html> <head> <meta name="viewport" content= ...