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

  1. /**
  2. *
  3. */
  4. package com.geloin.jxls.main;
  5. import java.util.ArrayList;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import com.geloin.jxls.beans.Report;
  10. import net.sf.jxls.transformer.XLSTransformer;
  11. /**
  12. * @author Geloin
  13. *
  14. */
  15. public class ReportTest {
  16. /**
  17. * @param args
  18. */
  19. public static void main(String[] args) throws Exception {
  20. String tplPath = "d:/work/proTmp/jxls/补换领业务统计报表模板.xlsx" ;
  21. String destPath = "d:/work/proTmp/jxls/补换领业务统计报表.xlsx" ;
  22. List<Report> reports = new ArrayList<Report>();
  23. Report r1 = new Report( 1 , "补领机动车行驶证" , 1L, 2L, 3L, 4L, 5L, 6L);
  24. reports.add(r1);
  25. Report r2 = new Report( 2 , "换领机动车行驶证" , 11L, 21L, 31L, 41L, 51L, 61L);
  26. reports.add(r2);
  27. Map<String, List<Report>> beanParams = new HashMap<String, List<Report>>();
  28. beanParams.put( "reports" , reports);
  29. XLSTransformer former = new XLSTransformer();
  30. former.transformXLS(tplPath, beanParams, destPath);
  31. }
  32. }

显示,最下面四行是生头戏,确切的来说,最下面一行是重头戏,流程其实很简单——指定模板位置和生成的文件的位置,然后生成数据,并把数据置入到一个Map里,Map的key对应于模板中用到的对象,最后用transformXLS直接生成Excel文件。 jxls操作excel文件标签: jxlsexcel模板示例2013-12-10 13:40 14369人阅读 评论(2) 收藏 举报 分类:JAVAEE(10) 版权声明:本文为博主原创文章,未经博主允许不得转载。        JXLS是基于Jakarta POI API的Excel报表生成工具,可以生成精美的Excel格 需求:最近拿到的一个任务,是将订单列表导出,按照订单列表导出(包括筛选条件)。 背景:由于原本的订单列表查询代码太过繁重,里面夹杂的逻辑较多,再有一个是自己想尽快的熟悉公司的业务。于是决定,自己按照原本的样子重新写一个查询的逻辑。 历程:原本以为这个功能会比较简单,用不了几天。原本打算用4天把这个需求搞定。结果,到今天结束用了10天。这大大的超出了我的预估。这也有开发系统故障的原因,导... 把鼠标放到上面,提示:此单元格中的数字为文本格式或者前面有撇号。把数值的单元格格式改为数值,求和单元格显示求和结果。真相大白!原来是这些数字的格式为文本,所以无法求和。 解决方法其实也很简单,把模板中对应的表达式*1转为数值格式即可。如: ${item.re...
正规教程:http://www.w3school.com.cn/xsl/index.asp 标签手册:http://www.w3school.com.cn/xsl/xsl_w3celementref.asp 函数手册:http://www.w3school.com.cn/xsl/xsl_functions.asp XSL头部定义: 因为XSL是标准的XML格式,所有第一行是xml的
在项目中使用 jxls 导出 excel ,coding可以很少很少, excel 报表格式可以很复杂同时也可以有很漂亮的样式,不再用网页导出这种很恶的方式来面对头痛的格式问题。 jxls 也是通过poi的api来 操作 excel ,利用定义好格式的模版再加上一些标签语言就可以 操作 数据了。 public static void doExport(String attachName, String templeteFile, Map beans, HttpS er vletResponse response) {
本人最近需要每天统计数据表,并每周一发送统计结果的邮件,所以写了个springboot老自动完成工作。项目地址为:https://github.com/707293891/springboot    其中某些统计数据需要特殊标记:红色显示。    如图:模版如下    但是需要在某一处特殊显示为红色:如图    现在写出实现过程:    利用 jxls 的区域监...
jxls 是一个用于在Java应用程序中生成和导出 Excel 文档的开源框架。该框架支持多种数据源,包括列表、Map和JavaBean。 jxls 也支持导出带有附件的 Excel 文档。 要在 jxls 中导出带有附件的 Excel 文档,首先需要为模板 文件 添加一个附件。可以在模板 文件 中插入一个超链接或按钮,点击该链接或按钮会下载或打开附件。添加附件的步骤如下: 1. 将附件 文件 保存到任意位置。 2. 在 Excel 模板中插入一个超链接或按钮。 3. 在超链接或按钮的目标属性中指定附件的URL地址。例如:file://C:/附件.txt。 4. 在代码中使用 jxls 框架导出 Excel 文档时,将附件 文件 作为参数传递给框架。 下面是一个简单的示例代码,演示如何在 jxls 中导出带有附件的 Excel 文档: ```java // 模板 文件 路径 String templatePath = "template. xls "; // 导出 文件 路径 String outputPath = "output. xls "; // 附件 文件 路径 String attachmentPath = "attachment.txt"; Map<String, Object> data = new HashMap<String, Object>(); // 设置导出数据 // 创建 jxls 导出器 Transform er transform er = Transform er Factory.create Transform er ( new File(templatePath), new FileOutputStream(outputPath)); // 添加附件 transform er .addTool(new UrlTool(attachmentPath, "__attachment__")); // 将数据导出到 Excel 文档 Workbook workbook = transform er . transform (); workbook.write(new FileOutputStream(outputPath)); 在上面的代码中,我们通过调用UrlTool的构造函数将附件 文件 添加到导出器中。UrlTool是 jxls 框架中的一个工具类,用于添加超链接或按钮。__attachment__是一个占位符,将在模板中用于定位附件。在模板 Excel 中,用${__attachment__}代表这个占位符。最终,我们将数据导出到 Excel 文档,并将 Excel 文档写入输出流中。 总之, jxls 支持导出带有附件的 Excel 文档。通过在模板 文件 中添加超链接或按钮,并在代码中将附件 文件 添加到导出器中,我们可以轻松地实现导出带有附件的 Excel 文档。
qq_27677005: org.springframework.beans.factory.BeanDefinitionStoreException: Line 2 in XML document from ServletContext resource [/WEB-INF/XFire-servlet2.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 8; cvc-elt.1: 找不到元素 'beans' 的声明。 Caused by: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 8; cvc-elt.1: 找不到元素 'beans' 的声明。 这是啥意思啊 service配置文件不对诶