网易首页 > 网易号 > 正文 申请入驻

Java导出Excel利器:JXLS

0
分享至

简介

相信大家能经常性的遇到项目上各类excel的导出,简单的excel格式,用简单的poi,easyExcel等工具都能导出。但是针对复杂的excel,有固定的样式、合并单元格、动态列等各类要求,导致excel 导出需要花很大一部分精力去写代码。jxls在很大程度上解决了以上问题。

这里简单介绍下jxls,JXLS是国外一个简单的、轻量级的excel导出库,链接:JXLS官网,这里有详细的文档说明教程(英文版),为了方便大家使用,我举例几个常见的excel模板配置,方便大家使用。

引入Maven依赖

org.jxls
jxls
2.11.0

org.jxls
jxls-poi
2.11.0

org.jxls
jxls-jexcel
${jxlsJexcelVersion}

后台代码

工具类: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.setJexlEngine(new JexlBuilder().namespaces(funcs).create());
jxlsHelper.processTemplate(context, transformer);

导出controller

//导出示例Controller
@PostMapping("/export/exportTradeCreditData")
@ResponseBody
public void exportTradeCreditData(HttpServletRequest request, HttpServletResponse response, Date countDate) {
String templatePath = "template/excel/trade_credit_data.xlsx";
//查找模板文件路径,这里PathTools类为系统内部封装类,大家注意copy
URL templateResource = PathTools.findResource(templatePath);
try (OutputStream out = response.getOutputStream();
InputStream templateStream = templateResource.openStream();) {
//业务数据查询
List list = countingReportService.queryTradeCreditData(countDate);

//excel模板内,数据组装
Map map = new HashMap();
map.put("year", getYear(countDate));
map.put("contracts", list);
JxlsUtils.exportExcel(templateStream, out, map);
out.close();
} catch (Exception e) {
e.printStackTrace();
log.error("导出excel异常, {}", JxlsUtils.executeException(e));
}
}
创建模版

  • 新建excel模板,xlsx格式

  • 工作表中按照的导出要求,设置表格样式

  • 仅限于简单的表头与行、列的宽度、高度

  • 编写写表达式,在工作表中右键插入批注,office中添加批注快捷键(Shit + F2)

  • 设置区域、数据行、合并单元格、动态列等

XLS表达式

简单列举常用的几个表达式

jx:areajx:area(lastCell = "H3")

XLS Area 是JxlsPlus中的一个重要概念,它表明excel模板中须要被解析的矩形区域,由A1到最后一个单元格表示,有利于加快解析速度。它须要被定义在excel 模板的第一个单元格(A1)。另外,推荐Java划水摸鱼网址:https://www.yoodb.com/ 即将上线

示例图:

jx:each 最常用的xls表达式jx:each(items="contracts" var="contract" lastCell="H3")

  • items:上下文中集合的变量名;

  • var:在遍历集合的时候每一条记录的变量名;

  • area:该XLS Command的解析区域;

  • direction:数据在excel中填充的方向,默认(DOWN)向下;

  • select:其值为一个表达式,用来过滤数据

jx:each(items="countMonths" var="month" lastCell="C3" direction="RIGHT")

简单的示例图:

复杂的示例图:

jx:mergeCells 合并单元格jx:mergeCells(lastCell="合并单元格范围"
[, cols="合并的列数"]
[, rows="合并的行数"]
[, minCols="要合并的最小列数"]
[, minRows="要合并的最小行数"]

  • lastCell:合并单元格范围;

  • cols:合并的列数;

  • rows:合并的行数;

  • minCols:要合并的最小列数;

  • minRows:要合并的最小行数;

示例图:

动态列-综合使用jx:each(items="countMonths" var="month" lastCell="C3" direction="RIGHT")

这里还是通过jx:each来使用,不同的是direction 属性的值为:RIGHT(向右),默认为:DOWN(向下)。

示例截图:

以上截图中几个参数说明:

  • countMonths:动态列集合,month为集合循环的实体,取值为:${month}

  • contracts:行数据集合,contract、colData 都是集合循环的实体,取值为:${contract.custName}等

  • colData.monthData.get(month):动态列的数据,根据列名去匹配实体字段

  • ${empty()}:判断集合对应动态列数据 是否为空,做好判断,写入数据

动态列数据行的数据获取:

${empty(colData.monthData.get(month) ) ? 0 : colData.monthData.get(month)}
总结

以上为我使用过程中,几个较常用的操作。

作者:HadryChen https://blog.csdn.net/baidu_14958441/article/details/128528237

公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!

最近有很多人问,有没有读者交流群!加入方式很简单,公众号Java精选,回复“加群”,即可入群!

(微信小程序):3000+道面试题,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计等,在线随时刷题!

特别推荐:专注分享最前沿的技术与资讯,为弯道超车做好准备及各种开源项目与高效率软件的公众号,「大咖笔记」,专注挖掘好东西,非常值得大家关注。点击下方公众号卡片关注

文章有帮助的话,点在看,转发吧!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
演出取消!蒙古国反华艺人原定呼市演出遭抵制,从2017开始已来华多次

演出取消!蒙古国反华艺人原定呼市演出遭抵制,从2017开始已来华多次

不掉线电波
2024-06-20 18:42:53
后续!俞莉教授被处分,据悉黑人留学生还不买账,理由令人愤慨!

后续!俞莉教授被处分,据悉黑人留学生还不买账,理由令人愤慨!

十三级台阶
2024-06-20 17:22:46
雷军骑单车上班引热议:英国品牌Brmopton!网友:本来还想整个雷总同款呢,一看“小布”卖1.5万

雷军骑单车上班引热议:英国品牌Brmopton!网友:本来还想整个雷总同款呢,一看“小布”卖1.5万

和讯网
2024-06-20 14:49:00
英国AI发现不含稀土磁铁,或将彻底改变整个世界!

英国AI发现不含稀土磁铁,或将彻底改变整个世界!

徐德文科学频道
2024-06-20 08:43:52
律师行贿法官妻子30万被认定金额较小 西安市司法局回应正调查 专家称“不予追诉”符合法律规定

律师行贿法官妻子30万被认定金额较小 西安市司法局回应正调查 专家称“不予追诉”符合法律规定

红星新闻
2024-06-20 14:14:23
曼晚:C罗在葡萄牙的表现证明滕哈格和曼联的判断是正确的

曼晚:C罗在葡萄牙的表现证明滕哈格和曼联的判断是正确的

懂球帝
2024-06-20 19:10:19
高考不能改变命运,但是WTO可以

高考不能改变命运,但是WTO可以

不死好鸟
2024-06-20 14:06:20
姜萍越来越危险了!

姜萍越来越危险了!

财经要参
2024-06-20 08:30:33
姜萍中专同学被找到,确认其月考数学成绩只有83分,有准考证可以证明

姜萍中专同学被找到,确认其月考数学成绩只有83分,有准考证可以证明

小萝卜丝
2024-06-20 21:06:54
“消失”两年后被查的“老虎”,敛财20年!

“消失”两年后被查的“老虎”,敛财20年!

政知新媒体
2024-06-20 17:38:24
将成为北约新掌门的他是谁?没结婚、会弹钢琴、爱用老式诺基亚

将成为北约新掌门的他是谁?没结婚、会弹钢琴、爱用老式诺基亚

红星新闻
2024-06-19 17:36:51
许国利被执行死刑,行刑前见了儿子最后一面,说出自己的杀妻真相

许国利被执行死刑,行刑前见了儿子最后一面,说出自己的杀妻真相

纸鸢奇谭
2024-06-19 23:55:54
店员泼顾客一脸咖啡粉,大喊“你投诉呀”!知名品牌回应,有员工称8小时内要做500杯咖啡

店员泼顾客一脸咖啡粉,大喊“你投诉呀”!知名品牌回应,有员工称8小时内要做500杯咖啡

21世纪经济报道
2024-06-20 19:32:21
中国女排0-3日本无缘四强:丢11.75分亚洲第一危矣 张常宁28扣8中

中国女排0-3日本无缘四强:丢11.75分亚洲第一危矣 张常宁28扣8中

颜小白的篮球梦
2024-06-20 19:24:51
炸裂!霍思燕晒北京豪宅,院子里养孔雀,一个月水电费超乎想象!

炸裂!霍思燕晒北京豪宅,院子里养孔雀,一个月水电费超乎想象!

西瓜爱娱娱
2024-06-20 15:15:45
中国香港海关查获596颗高端CPU:走私中国内地,价值1120万!Intel至强处理器,可支持AI加速计算、云服务

中国香港海关查获596颗高端CPU:走私中国内地,价值1120万!Intel至强处理器,可支持AI加速计算、云服务

和讯网
2024-06-20 16:09:32
前瞻|普京第五次到访越南,全面战略伙伴或讨论武器及双边支付

前瞻|普京第五次到访越南,全面战略伙伴或讨论武器及双边支付

澎湃新闻
2024-06-20 12:26:32
事关重大!多地书记省长部署

事关重大!多地书记省长部署

鲁中晨报
2024-06-20 14:35:02
菲方称中国海警在冲突中挥舞刀具,外交部:颠倒黑白,倒打一耙!

菲方称中国海警在冲突中挥舞刀具,外交部:颠倒黑白,倒打一耙!

环球网资讯
2024-06-20 16:18:12
上海两家Manner咖啡门店内,两顾客同一天分别被扇耳光和泼咖啡粉?官方回应

上海两家Manner咖啡门店内,两顾客同一天分别被扇耳光和泼咖啡粉?官方回应

极目新闻
2024-06-20 18:50:58
2024-06-20 22:14:44
Java精选
Java精选
一场永远也演不完的戏
1551文章数 3855关注度
往期回顾 全部

头条要闻

原中候补受审 今年年初曾被中纪委公开通报

头条要闻

原中候补受审 今年年初曾被中纪委公开通报

体育要闻

绿军的真老大,开始备战下赛季了

娱乐要闻

叶舒华参加柯震东生日聚会,五毒俱全

财经要闻

楼市加速去库存 收储扩围至县级以上城市

科技要闻

小米SU7流量泼天,富贵却被蔚来接住了

汽车要闻

售价11.79-14.39万元 新一代哈弗H6正式上市

态度原创

艺术
旅游
本地
公开课
军事航空

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

旅游要闻

铁路儿童票新规 已有超4900万小旅客免费出行

本地新闻

2024·合肥印象|用崭新视角对话城市发展

公开课

近视只是视力差?小心并发症

军事要闻

以军发言人公开表示"哈马斯无法被消灭" 以政府反驳

无障碍浏览 进入关怀版