JXLS是基于Jakarta POI API的Excel报表生成工具,可以生成精美的Excel格式报表。它采用标签的方式,类似JSP标签,写一个Excel模板,然后生成报表,非常灵活,简单!
JXLS软件首页:http://jxls.sourceforge.net/,SVN源码地址:svn://svn.code.sf.net/p/jxls/code。
使用JXLS生成Excel文件相对较为简单,只需要一个Excel模板和几行代码即可。Excel模板的内容也比较简单,主要是运用标签及集合函数。
JXLS的标签比较常用的有以下几个:
(1) jx:forEach,注意大小写,用于迭代,属性有两个,一个是items,一个是var,其作用、含义和用法与jstl一致;
(2) jx:if,逻辑判断,有一个属性,即test,其作用、含义和用法与jstl一致。
集合函数有以下几个:
(1) sum,求和;
(2) min,取最小;
(3) max,取最大;
(4) ave,求均值;
(5) count,取数量。
JXLS有一个比较大的优势——你可以先设计好Excel的样式,再插入JXLS的标签,最终生成的Excel跟你的设计一模一样——这与POI不同,POI通常要求我们在Java代码中进行样式和字体的设计。
JXLS还有一个特点——你可以直接使用Excel自带的函数。
且看以下模板:
首先这是一个Excel文件,后缀为xls或xlsx,它与普通Excel文档的不同在于,这里面加入了很多标签。
首先是jx:forEach,如果把上图看作一个jsp文件,或许我们会更容易理解一些——迭代reports对象,它可能是一个List或数组,然后分别取出reports中,对象的id、businessType、unaccept等属性的值,分别显示在A列、B列、C列等。
标签会被怎么处理?会不会使得最终生成的Excel文件有一个空行或空列?不会,JXLS在生成Excel时,会把含有标签的那一行删除,你当它不存在就行了。
接着来看jx:if,相当简单的一个判断,还是把它当jsp来看,很容易理解。
$[and(c3)]、$[count(c3)],这是上文提到过的集合函数吗?不是的,这是Excel自带的函数,在Excel中,我们用类似“=and(c3:38)”或“=count(c3:c8)”来计算值,而在JXLS中,这些函数的用法变为$[函数名(列)],为什么在Excel中的“(c3:c8)”变成了“(c3)”呢?因为上图中的C3在jx:forEach中,它代表的已经不是第3行第C列,而是jx:forEach生成的所有行中的第3列。
JXLS提供的集合函数怎么使用?——${count(businessType):reports},表示使用的是JXLS中的count函数,统计reports对象(List或数组)中,对象的businessType的数量,其实,相当于reports数组或对象的长度了。
JXLS提供的集合函数是用大括号括起来的,而Excel自带的函数是用中括号括起来的,Excel自带的函数只需要指定列即可,JXLS提供的集合函数需要指定对象、指定属性。
模板和Java代码怎么对应呢?下文是示例:
- /**
- *
- */
- package com.geloin.jxls.main;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import com.geloin.jxls.beans.Report;
- import net.sf.jxls.transformer.XLSTransformer;
- /**
- * @author Geloin
- *
- */
- public class ReportTest {
- /**
- * @param args
- */
- public static void main(String[] args) throws Exception {
- String tplPath = "d:/work/proTmp/jxls/补换领业务统计报表模板.xlsx";
- String destPath = "d:/work/proTmp/jxls/补换领业务统计报表.xlsx";
- List<Report> reports = new ArrayList<Report>();
- Report r1 = new Report(1, "补领机动车行驶证", 1L, 2L, 3L, 4L, 5L, 6L);
- reports.add(r1);
- Report r2 = new Report(2, "换领机动车行驶证", 11L, 21L, 31L, 41L, 51L, 61L);
- reports.add(r2);
- Map<String, List<Report>> beanParams = new HashMap<String, List<Report>>();
- beanParams.put("reports", reports);
- XLSTransformer former = new XLSTransformer();
- former.transformXLS(tplPath, beanParams, destPath);
- }
- }
显示,最下面四行是生头戏,确切的来说,最下面一行是重头戏,流程其实很简单——指定模板位置和生成的文件的位置,然后生成数据,并把数据置入到一个Map里,Map的key对应于模板中用到的对象,最后用transformXLS直接生成Excel文件。
相关推荐
这是博客《官方给的 JXLS 读取 excel 文件的例子》配套示例,博客地址:http://blog.csdn.net/defonds/article/details/6733579。 下载后,将得到的所有依赖包导入项目即可运行。
java利用jxls操作excel模板文件
用Jxls实现数据导入excel实例java代码
jxls利用模板生成excel文件, 非常方便
jxls教程 使用Java操作Excel,创建模板生成 jxls教程 使用Java操作Excel,创建模板生成
jxls导出excel官方例子jxls导出excel官方例子jxls导出excel官方例子jxls导出excel官方例子
jxls 实现例子 博文链接:https://tml808.iteye.com/blog/150766
本人从网上搜集资料,加上自己研究探索,现在完成了用Jxls导入导出Excel2003和Excel2007数据,读取和写入xls和xlsx文件,现把结果告诉大家,希望大家不走弯路,直接掌握先进实用的技术,解决实际工作问题。...
使用jxls技术,自己创建Excel模板导出数据
jxls使用简单,只需定义一个excel模板,在excel中使用jx公式即可轻松实现,具体可查看项目,运行Application.java的main方法即可启动项目,访问htpp://localhost:8080/member/user/userExport即可导出数据生成excel...
jar包 jxls方式导出excel 包含所需的jar包 java中
SpringBoot(33) 整合JXLS实现Excel导入导出
本人从网上搜集资料,加上自己研究探索,现在完成了用Jxls导入导出Excel2003和Excel2007数据,读取和写入xls和xlsx文件,现把结果告诉大家,希望大家不走弯路,直接掌握先进实用的技术,解决实际工作问题。...
NULL 博文链接:https://siyuan-zhu.iteye.com/blog/2240423
本人从网上搜集资料,加上自己研究探索,现在完成了用Jxls导入导出Excel2003和Excel2007数据,读取和写入xls和xlsx文件,现把结果告诉大家,希望大家不走弯路,直接掌握先进实用的技术,解决实际工作问题。...
使用JXLS+Excel模板制作灵活的excel导出
java导出Excel表格,jxls模板导出Excel,如何使用模板导出Excel
excel-jxls excel-jxls excel-jxls excel-jxls excel-jxls excel-jxls excel-jxls excel-jxls excel-jxls excel-jxls excel-jxls
java web使用jxls导出excel功能,详细参考:http://blog.csdn.net/xiejx618/article/details/38906683