jxls操作excel文件

    xiaoxiao2021-12-15  46

    jxls操作excel文件

    标签: jxlsexcel模板示例   14369人阅读  评论(2)  收藏  举报   分类: JAVAEE(10) 

            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代码怎么对应呢?下文是示例:

    [java]  view plain  copy   /**   *    */   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文件。

    顶 0 踩 0     上一篇poi读取Excel 下一篇JXLS生成Excel中循环的两种用法

    我的同类文章

    JAVAEE(10) JXLS生成Excel图表2013-12-11阅读3048poi读取Excel2013-12-09阅读1285dom4j解析xml2013-12-06阅读793新浪旧事-javaMail的UnsupportedDataTypeException错误2012-04-16阅读565新浪旧事-Java向飞秋(FeiQ)发送消息2012-04-13阅读3840 JXLS生成Excel中循环的两种用法2013-12-10阅读6655poi生成Excel2013-12-09阅读1837ant不是内部命令也不是外部命令问题的解决方法2012-08-21阅读2497新浪旧事-log4j资源2012-04-16阅读454新浪旧事-jsp:useBean2012-04-13阅读452

    参考知识库

    .NET知识库

    2281关注|815收录

    Java SE知识库

    17551关注|509收录

    Java EE知识库

    12025关注|802收录

    Java 知识库

    20483关注|1422收录

    猜你在找 Excel高端应用:多条件约束报表自动统计与制作 Excel报表管理利器 ActiveReports 报表三小时入门视频 JSP分页标签—DisplayTag实战视频课程 PHP面向对象设计模式 开源jxls - java导Excel多sheet - 模板文件定义类似jsp的el表达式 开源jxls - java导Excel多sheet - 模板文件定义类似jsp的el表达式 jxls使用模板生成excel文件 jxls生成Excel文件 jxls 使用模板文件导出生成excel 查看评论 2楼  lovekc 2015-07-17 15:41发表 [回复] 两个forEach 怎么处理呀,我的是通过注释写的,比如第5行一个forEach,第6行又一个forEach。最终生成的结果是:比如第一个forEach生成10条记录,第二个forEach生成10条记录,但是第6行却是一个空白行,也就是第一个forEach的一条占在第6行的记录没显示出来,其他正常。感觉是被模板中的第6行注释屏蔽掉了 1楼  coding23333 2015-01-21 14:25发表 [回复] 开源报表免费但是开发要求高,商业报表(以finereport为代表)收费但是上手操作更加简单,各取所需
    转载请注明原文地址: https://ju.6miu.com/read-1000177.html

    最新回复(0)