文档章节

1、带你一起拥有Jxls2.X

CDD
 CDD
发布于 2018/10/15 15:50
字数 1432
阅读 474
收藏 1

http://www.chendd.cn/information/viewInformation/other/224.a

Jxls是基于Poi导出Excel的模板式封装,较之直接使用Poi来一路create的方式,它更使得一般(小批量数据)的导出Excel变得非常简单和易于维护。至于使用它的优缺点请查找我关于它1.0版本相关的文章,这里主要讲述Jxls2.x(此刻最新的版本为2.4.3)的版本,关于此特地将一些常用的知识点和特色的功能点进行了“浅浅”的整理,共计十几篇文章,你值得拥有。它的官网地址为:http://jxls.sourceforge.net ,对应的demo下载地址为:https://bitbucket.org/leonate/jxls-demo (demo中所有的示例均采用了try-with的写法,这个也值得拥有),特别注意了,它的API就自己去看吧,本章节讲述的前提是你大概上已经看过它的API了,了解到一些概念、标签、语法等。另外一个重点是即时是有了Jxls2也不要放弃使用原生Poi,有的复杂报表两者结合才更加完美;还有就是用于(超)大数据量的导出时还得是Poi好使,毕竟有flushRows。

我们先来道一下Jxl2能做哪些事儿吧,可能这才是你最关注的东西,如:列表数据循环嵌套显示、Excel公式计算、动态表格、单元格合并、自定义函数、自定义表达式、SQL模板报表、插入超链接、插入图片、数据分组、IF-ELSE逻辑判断、按模板填充数据等等等,这些也都是我感觉革新的地方,也是我后文中要进行一一详细阐述的知识点。

Jxls2与1的版本有着巨大的版本差异,抛弃了在Excel模板中<jx:tag/>标签的使用方式,改为直接在单元格中插入批注的方式来声明表达式,并且以前的版本只是单纯的进行逻辑、数据上的处理(还有基于Excel中模板自身公式的支持),对于稍微复杂的实现必须交由后台的Poi进行二次处理。Jxls2的版本增强了逻辑判断处理,如:可支持else逻辑;可实现复杂的单元格逻辑,如:将单元格设置为超链接处理、设置为图片处理等等。Jxls2支持Poi与JExcel两个Java解析Excel的实现,默认采用commons-jxel表达式引擎(用户可以替换)来动态运算。

         Jxls2解析模板时有3种方式,分别是直接从模板的备注标记中解析、xml配置中解析、Java后台创建的方式解析,本篇所有章节中全部使用在模板的备注标记中解析的方式(沿用1.0时的习惯,另外实际应用部署后,如需调整Excel显示的样式效果可直接通过调整Excel模板文件的方式来,也无需重启相关服务器)。

了解Jxls2需要有一个区域的概念“Area”,这个区域定义了模板中所需要解析的动态区域,即所有的表达式处理都要包括在内,且这个区域的声明只能为Excel单元格的A1格子内。本片文章主要介绍一下什么是Jxls2、它能帮我们干些什么和一个Hello示例。至于这个Hello程序,我将代码写至最简化(一上来就接触到别人封装好的程序不利于大家对于它的原有实现的了解),并加上相关的解释来说明。

Java代码参考为:

package cn.chendd.examples;



import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;



import org.jxls.common.Context;

import org.jxls.util.JxlsHelper;



/**

 * Hello 入门体验

 * @author chendd

 */

public class SimpleHelloJxls {



   public static void main(String[] args) throws Exception {

      //模板文件

      InputStream is = SimpleHelloJxls.class.getClass().getResourceAsStream("/cn/chendd/examples/templates/simpleHello.xls");

      Context context = new Context();

      //设置参数变量

      context.putVar("name", "chendd");

      OutputStream os = new FileOutputStream(new File("d:\\test\\out_simpleHello.xls"));

      //载入模板、处理导出

      JxlsHelper.getInstance().processTemplate(is , os , context);

      //释放资源

      os.flush();

      os.close();

      is.close();

      //备注,如果从一个简单的示例入手,这个就再简单不过了

     

   }

  

}

代码说明

可以看出以上代码较为简单,构造一个InputStream输入流读入一个xls的模板文件,定义一个变量name,且值为chendd,最后再处理模板和填充数据,最后将模板写出。

模板参考为:

blob.png

模板说明

在A1单元格处定义了一个批注(位于Excel菜单栏—审阅处),这里需要特别注意一下,故意在A1处设置了单元格合并,实际上这个区域还是属于A1格子。在开始接触时也是讲jx:area(lastCell=”A1”)写成了D1是不对的,实际上还得是合并单元格的A1位置(运行结果处有解释);另外Excel模板文件的Sheet名称为“Hello”。另外${xx}是jxel表达式的解析引擎规范,表示这里引入了name的参数解析。

运行示例为:

blob.png

运行说明

我们选中这个合并后的单元格区域发现实际上它是A1格子,${name}是对于后台声明变量(putVar)参数的解析,比较简单,不多赘述。

相关下载

 

官网demo-maven工程下载.zip(非原始工程,已由maven进行编译后的,可直接使用eclipse导入工作空间的)

 

out_simpleHello.xls 示例输出文件下载

本示例代码会在后文中提供。

© 著作权归作者所有

CDD

CDD

粉丝 6
博文 40
码字总数 36015
作品 0
海淀
程序员
私信 提问
带你学本书

带你学本书,是带你一起读书、写作的学习计划。你在这里学习到如何写好一篇文章应该掌握哪些知识;在这里你可以获得认识到更多的良师益友;在这里你还可以获得免费赠书,让你在写作学习的慢慢...

angkee
2017/11/13
0
0
【宇润日常疯测-005】PHP 中的 clone 和 new 性能比较

和本不应该放在一起比较,它们的作用是不同的。但可能有一些场景下,可以用也可以用,那么这时候我们选哪个呢? 我编写了两个测试,第一个是声明一个空类,第二个是带构造方法、属性的类。另...

宇润
2018/12/13
95
1
PostgreSQL与MySQL语法对比总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/u010398771/article/details/97118619 总结下PostgreSQL的语法, 对比...

长河
07/24
0
0
J_sky/PrimarySchoolMathematics

孩子上小学一年级了,加减乘除的口算就要开始练习了,估计老师肯定会让家长出题,所以提前准备一下,利用Python开发了一套自动生成小学生口算题的小应用。而且今天是程序员节,撸200行代码庆...

J_sky
01/02
0
0
重磅来袭!CoinUp 面向全球招募社群合伙人!

进入币圈这么久 还记得一把梭哈的日子吗 买的币越来越多 被套的币是不是也越来越多呢 就差亏的裤衩子都没了 进入币圈的你是不是想着要实现财富自由呢?是不是想一夜暴富呢?只是后来,后来的...

CoinUp搬砖神器
2018/07/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot2.0 maven打包分离lib,resources

springboot将工程打包成jar包后,会出现获取classpath下的文件出现测试环境正常而生产环境文件找不到的问题,这是因为 1、在调试过程中,文件是真实存在于磁盘的某个目录。此时通过获取文件路...

陈俊凯
今天
6
0
BootStrap

一、BootStrap 简洁、直观、强悍的前端开发框架,让web开发更加迅速、简单 中文镜像网站:http://www.bootcss.com 用于开发响应式布局、移动设备优先的WEB项目 1、使用boot 创建文件夹,在文...

wytao1995
今天
10
0
小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
今天
8
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
今天
8
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
今天
11
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部