java jxls_jxls2.3-简明教程
jxls是一个简单的、轻量级的excel导出库,使用特定的标记在excel模板文件中来定义输出格式和布局。java中成熟的excel导出工具有pol、jxl,但他们都是使用java代码的方式来导出excel,编码效率很低且不方便维护。
另外,jxls2.3的运行效率也相当不错,经过测试,在禁用日志输出的情况下,导出excel单表66535条记录仅仅3000毫秒,与poi几乎没什么大的差距。
demo工程源码下载:https://files.cnblogs.com/files/klguang/jxls-demo.zip
springboot-demo下载:https://files.cnblogs.com/files/klguang/jxls-springboot.zip
excel模板示例:
Excel模板标记在jxls中的作用分为三部分:
bean属性标记
XLS Area定义标记
XLS Command表示标记
bean属性标记
jxls使用 Apache JEXL表达式语言来解析定义在excel模板中的表达式。JEXL与JSTL相似,并对JSTL进行了扩展。eg:
${department.chief.age} //属性可以是无限深度
${utils:dateFmt(date,"yyyy-MM-dd")} //自定义工具函数
XLS Area定义标记
XLS Area 是JxlsPlus中的一个重要概念,它代表excel模板中需要被解析的矩形区域,由A1到最后一个单元格表示,有利于加快解析速度。
XLS Area 使用excel注释标注表示,它需要被定义在excel 模板的第一个单元格(A1):
jx:area(lastCell = "")
这个标记定义了excel模板需要被解析的矩形区域为:A1到。
XLS Command表示标记
XLS Command 使用excel注释标注表示,命令格式如下:
jx:(attr1='val1' attr2='val2' ... attrN='valN' lastCell= areas=["", "
... ""])
是库自带的命名或是用户自定义并注册到XlsCommentAreaBuilder的命令。
each 命令是最常用的XLS命令,形如:
jx:each(items="employees" var="employee" lastCell="D4")
each 可以有如下一些属性:
items 上下文中集合的变量名;
var 在遍历集合的时候每一条记录的变量名;
area 该XLS Command的解析区域;
direction 数据在excel中填充的方向,默认(DOWN)向下;
select 其值为一个表达式,用来过滤数据。
jexl自定义工具函数
如果你需要自定jexl来处理数据,你可以从Transformer对象获取JexlEngine引用,并对其配置。
下面的例子实现了将一个自定义jexl函数注册到utils命名空间下:
JxlsHelper jxlsHelper = JxlsHelper.getInstance();
Transformer transformer = jxlsHelper.createTransformer(is, os);
JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator)transformer.getTransformationConfig().getExpressionEvaluator();
Map funcs = new HashMap();
funcs.put("utils", new JxlsUtils()); //添加自定义功能
evaluator.getJexlEngine().setFunctions(funcs);
demo
工程目录:
Employee.java
public class Employee {
private String name;
private Date birthDate;
private BigDecimal payment;
private BigDecimal bonus;
// getter and setter
}
建立excel模板:
工具类JxlsUtils.java
public class JxlsUtils {
public static void exportExcel(InputStream is, OutputStream os, Map model) throws IOException {
Context context = new Context();
if (model != null) {
for (String key : model.keySet()) {
context.putVar(key, model.get(key));
}
}
JxlsHelper jxlsHelper = JxlsHelper.getInstance();
Transformer transformer = jxlsHelper.createTransformer(is, os);
JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator) transformer.getTransformationConfig()
.getExpressionEvaluator();
Map funcs = new HashMap();
funcs.put("utils", new JxlsUtils()); // 添加自定义功能
evaluator.getJexlEngine().setFunctions(funcs);
jxlsHelper.processTemplate(context, transformer);
}
// 日期格式化
public String dateFmt(Date date, String fmt) {
if (date == null) {
return "";
}
try {
SimpleDateFormat dateFmt = new SimpleDateFormat(fmt);
return dateFmt.format(date);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
// if判断
public Object ifelse(boolean b, Object o1, Object o2) {
return b ? o1 : o2;
}
}
入口ObjectCollectionDemo.java
public class ObjectCollectionDemoXlsx {
static Logger logger = LoggerFactory.getLogger(ObjectCollectionDemoXlsx.class);
public static void main(String[] args) throws ParseException, IOException {
logger.info("Running Object Collection demo");
List employees = generateSampleEmployeeData();
OutputStream os = new FileOutputStream("target/object_collection_output.xlsx");
Map model=new HashMap();
model.put("employees", employees);
model.put("nowdate", new Date());
InputStream inputStream = ObjectCollectionDemoXlsx.class.getClassLoader()
.getResourceAsStream("jxls-template/object_collection_template.xlsx");
JxlsUtils.exportExcel(inputStream, os, model);
os.close();
}
public static List generateSampleEmployeeData() throws ParseException {
List employees = new ArrayList();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MMM-dd", Locale.US);
employees.add( new Employee("Elsa", dateFormat.parse("1970-Jul-10"), 1500, 0.15) );
employees.add( new Employee("Oleg", dateFormat.parse("1973-Apr-30"), 2300, 0.25) );
employees.add( new Employee("Neil", dateFormat.parse("1975-Oct-05"), 2500, 0.00) );
employees.add( new Employee("Maria", dateFormat.parse("1978-Jan-07"), 1700, 0.15) );
employees.add( new Employee("John", dateFormat.parse("1969-May-30"), 2800, 0.20) );
return employees;
}
}
生成效果:
java jxls_jxls2.3-简明教程相关推荐
- [转]Java NIO通俗易懂简明教程
Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO. Java NIO提供了与 ...
- java程序设计简明教程张晓龙_Java网络编程简明教程
Java网络编程简明教程 网络编程 计算机网络相关概念 计算机网络是两台或更多的计算机组成的网络,同一网络内的任意两台计算机可以直接通信,所有计算机必须遵循同一种网络协议. 互联网 互联网是连接计算机 ...
- Java手机游戏开发简明教程 (SunJava开发者认证程序员 郎锐)
原文发布时间为:2008-07-30 -- 来源于本人的百度文章 [由搬家工具导入] Java手机游戏开发实例简明教程 (SunJava开发者认证程序员 郎锐) 一.手机游戏编写基础 1.手机游戏设计 ...
- java 大学简明教程_Simply-Java 《JAVA大学简明教程:实例程序设计》例子及习题源代码 - 下载 - 搜珍网...
JAVA大学简明教程:实例程序设计/附书源代码/Tutorial01/MovingShapes/BoundedShape.class JAVA大学简明教程:实例程序设计/附书源代码/Tutorial0 ...
- 一周极客热文:Java 8简明教程
该教程将带领你一步一步地认识这门语言Java 8的新特性.通过简单明了的代码示例,你将会学习到如何使用默认接口方法,Lambda表达式,方法引用和重复注解.看完这篇教程后,你还将对最新推出的API有一 ...
- java程序设计简明教程答案张晓龙_java2简明教程部分课后复习题答案
JAVA2 简明教程习题答案 第二章 课堂习题 : public class Main { public static void main(String[] args) { //initializat ...
- 视频教程-MyBatis简明教程-Java
MyBatis简明教程 就职于国内知名在线互联网旅游公司,10+互联网开发经验,精通前后端开发 刘志强 ¥29.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订 ...
- Realm Java 简明教程(1)
Realm Java 简明教程 Realm 是一个轻量的android版本的数据存储库 Realm 是一个轻量的android版本的数据存储库,快速简洁的操作方式,使得其优势得以凸显,我们来看下一个实 ...
- Java Web 简明教程
点此查看 所有教程.项目.源码导航 1. 前言 本教程用于介绍Java Web开发入门的方方面面,包括开发环境.工具.网页.Java.数据库等. 本教程写于2016年底,一些内容相对比较陈旧了,新版的 ...
- CGIC简明教程(转摘)
CGIC简明教程 本系列的目的是演示如何使用C语言的CGI库"CGIC"完成Web开发的各种要求. ********************************* 基础 ...
最新文章
- 真实!拖垮中小技术团队的 11 宗罪
- python3.5.3安装完后什么样子_python3.5安装python3-tk详解
- 数据库查询 添加伪列
- java inputstream 回退_系统学习 Java IO (十)----回退流 PushbackInputStream
- Mybatis 一对多 结果集映射 简单入门 易懂
- 【TensorFlow-windows】keras接口——卷积核可视化
- android qq红包,Android实现QQ抢红包插件
- sql server累计求和函数_SQL基础--SQL高级功能
- 创建二级索引_Mysql创建索引
- linux 串口最高速率,Uart 16c950 linux速度高于B4000000(4Mbps)
- cmd 命令 之 dir 之 强化使用
- FPGA实现VGA显示(二)——————color_bar显示及方框移动(参考开拓者FPGA开发指南)
- ruby 安装和使用
- 指针操作数组c语言,C语言入门教程-用指针操作数组
- Markdown合并表格单元格
- gitlab本地配置_Gitlab的安装及基本使用(一)
- 异构群体机器人协作任务分配(群体智能论文学习)
- 论文投稿指南——中文核心期刊推荐(计算机技术2)
- 【经典题】跟着凡人玩转C语言之快速排序算法
- 套料软件XSperNEST
热门文章
- 四川大学本科教务系统 - 一键评教
- Google SPDY介绍
- 《打开量化投资的黑箱》
- ha rose server安装 sql_ROSE HA V8.9+Win2008+SQL2008双机配置详细指南(图文)
- 离合器膜片弹簧的优化设计matlab,汽车离合器膜片弹簧结构优化设计(本科毕业论文设计)...
- 【seaborn】(五)联合分布图
- typedef用法详解
- 基于Multisim14的弱信号放大电路的设计与仿真
- java mail pom_集成JavaMail
- A7芯片 IOS降级 跳过ID | ipad Mini2降级 10.3.3