jxls 主页:http://jxls.sourceforge.net/index.html
最近需要用到 jxls (版本0.9.3),使用模板生成 excel 文件,模板内容如下:
xml 代码
- <jx:forEach items="${students}" var="s">
- <jx:if test="${s.sex == 'F'}">
- ${s.name} ${s.age} 女 ${s.birthday}
- </jx:if>
- <jx:if test="${s.sex == 'M'}">
- ${s.name} ${s.age} 男 ${s.birthday}
- </jx:if>
- </jx:forEach>
当数据量很少的时候,例如 20 条数据,效率上是没问题的
但如果有 100 条数据,效率就非常低了,
100 条数据用了 3 秒左右,实在无法忍受
电脑配置:CPU P4 3.0G , 内存 1G。
而且,excel 文件的行数不是 100 行,而是 600 行,其中后 500 行是空白行
如果数据有 2000 行,那么空白行数是 10000 行......
经多次测试,发现在 jx:forEach 循环中
使用 jx:if ,jx:outline 之类的 tag,会出现空白行
如果这些 tag 占用的行数是 rows,
那么空白行的数目大概是:rows * 循环次数 + false 条件产生的行数
那么,把 jx:if 标记去掉呢?
10000 条数据用了 8.4 秒左右,5000条数据大概是 4.6 秒,还可接受,而且没空白行。
看来 jxls 的 if tag 效率非常低
要生成大数据量的 excel 文件,还是不用这个 tag 了