我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java 导出Excel利器 JXLS(excel模板配置教程)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java 导出Excel利器 JXLS(excel模板配置教程)

简介

相信大家能经常性的遇到项目上各类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")@ResponseBodypublic void exportTradeCreditData(HttpServletRequest request, HttpServletResponse response, Date countDate) {String templatePath = "template/excel/trade_credit_data.xlsx";        //查找模板文件路径,这里PathTools类为系统内部封装类,大家注意copyURL 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: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)}

总结

以上为我使用过程中,几个较常用的操作,关于复杂的动态列使用excel模板,详见附件

来源地址:https://blog.csdn.net/baidu_14958441/article/details/128528237

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java 导出Excel利器 JXLS(excel模板配置教程)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录