首页 文章 精选 留言 我的

精选列表

搜索[Java],共10000篇文章
优秀的个人博客,低调大师

Java 导出 Excel 利器:JXLS

**目录** - 简介 - 引入 maven 依赖 - 后台代码 - 创建模板 - XLS 表达式 - jx:area - jx:each 最常用的 xls 表达式 - jx:mergeCells 合并单元格 - 动态列-综合使用 - 总结 --- ## **简介** 相信大家能经常性的遇到项目上各类 excel 的导出,简单的 excel 格式,用简单的 poi,easyExcel 等工具都能导出。但是针对复杂的 excel,有固定的样式、合并单元格、动态列等各类要求,导致 excel 导出需要花很大一部分精力去写代码。jxls 在很大程度上解决了以上问题。 这里简单介绍下 jxls,JXLS 是国外一个简单的、轻量级的 excel 导出库,链接:JXLS 官网,这里有详细的文档说明教程(英文版),为了方便大家使用,我举例几个常见的 excel 模板配置,方便大家使用。 > **“**https://jxls.sourceforge.net/ ## **引入 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 格式,不要使用 xls 格式,防止导出时数据转换出错 - 新建 excel 模板,xlsx 格式 - 工作表中按照的导出要求,设置表格样式 - 仅限于简单的表头与行、列的宽度、高度 - 编写写表达式,在工作表中右键插入批注,office 中添加批注快捷键(Shit + F2) - 设置区域、数据行、合并单元格、动态列等 ## **XLS 表达式** 简单列举常用的几个表达式 ### **jx:area** ``` jx:area(lastCell = "H3") ``` XLS Area 是 JxlsPlus 中的一个重要概念,它表明 excel 模板中须要被解析的矩形区域,由 A1 到最后一个单元格表示,有利于加快解析速度。它须要被定义在 excel 模板的第一个单元格(A1)。 示例图: ![jx:area 示例图](https://developer.qcloudimg.com/http-save/8539065/d2e65ed77a39feba105b82916e70c6e3.png) jx:area 示例图 ### **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:each 简单示例图](https://developer.qcloudimg.com/http-save/8539065/7f0d88df4b8421e4685c68369237a304.png) jx:each 简单示例图 复杂的示例图: ![jx:each 复杂示例图](https://developer.qcloudimg.com/http-save/8539065/bcd8b98307630d745f3fe719aed5ec47.png) jx:each 复杂示例图 ### **jx:mergeCells 合并单元格** ``` jx:mergeCells(lastCell="合并单元格范围" [, cols="合并的列数"] [, rows="合并的行数"] [, minCols="要合并的最小列数"] [, minRows="要合并的最小行数"] ) ``` - lastCell:合并单元格范围; - cols:合并的列数; - rows:合并的行数; - minCols:要合并的最小列数; - minRows:要合并的最小行数; > **“**注意:此命令只能用于还没有合并的单元格。 示例图: ![jx:mergeCells 示例图](https://developer.qcloudimg.com/http-save/8539065/cc8755d0a177bcdc328be68ed9b839fb.png) jx:mergeCells 示例图 ### **动态列-综合使用** ``` jx:each(items="countMonths" var="month" lastCell="C3" direction="RIGHT") ``` 这里还是通过 jx:each 来使用,不同的是 direction 属性的值为:RIGHT(向右),默认为:DOWN(向下)。 示例截图: ![动态列示例截图](https://developer.qcloudimg.com/http-save/8539065/765cbcf53a9cd960f2ab5368ee22dea4.png) 动态列示例截图 以上截图中几个参数说明: - countMonths:动态列集合,month 为集合循环的实体,取值为:${month} - contracts:行数据集合,contract、colData 都是集合循环的实体,取值为:${contract.custName}等 - colData.monthData.get(month):动态列的数据,根据列名去匹配实体字段 - ${empty()}:判断集合对应动态列数据是否为空,做好判断,写入数据 动态列数据行的数据获取: ``` ${empty(colData.monthData.get(month) ) ? 0 : colData.monthData.get(month)} ``` ## **总结** 以上为我使用过程中,几个较常用的操作。

优秀的个人博客,低调大师

java 快速开发框架-zebra

zebra是基于SpringBoot封装的增强框架,基于“约定优于配置”的理念,再次精简常规配置, 内置丰富的starter,并优化Springboot环境配置和完善的规约限制。 其目的是提供一个更为完整的一站式解决方案,帮助开发人员更加快速的集成常用第三方库或工具到 Spring Boot Web 应用程序中, 建立统一基础技术规范,建立可积累,可复用的组件库,促进开发人员复用,提升研发质量和效率。 框架地址为:http://zebra.zhanghongbin.xyz 最新版本为v1.0.5 更新内容如下: 1. 去掉redis hutool序列化方式2. 增加redisson starter及相关功能3. 增加captcha starter相关配置4. 修复message starter邮件发送bug5. 修复tenant starter中TenantHelper类增加一些方法6. 调整cache starter中RedisUtil类一些方法7. 增加git-changelog-maven-plugin插件

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册