怎样修改excel表格名称
如果你的Excel工作薄里面有多个工作表,但你又需要重新命名工作表,是不是手动一个一个去修改,不但工作效率低下,而且当你修改完成后又发现漏掉一个或者某一个修改错误了,又得一遍一遍的查找修改。别再浪费时...
2024.11.21相信大家能经常性的遇到项目上各类excel的导出,简单的excel格式,用简单的poi,easyExcel等工具都能导出。但是针对复杂的excel,有固定的样式、合并单元格、动态列等各类要求,导致excel 导出需要花很大一部分精力去写代码。jxls在很大程度上解决了以上问题。
这里简单介绍下jxls,JXLS是国外一个简单的、轻量级的excel导出库,链接:JXLS官网,这里有详细的文档说明教程(英文版),为了方便大家使用,我举例几个常见的excel模板配置,方便大家使用。
❝
https://jxls.sourceforge.net/
❞
引入maven依赖org.jxlsjxls2.11.0org.jxlsjxls-poi2.11.0 org.jxlsjxls-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)设置区域、数据行、合并单元格、动态列等基于 Spring Boot + MyBatis Plus + Vue 3.2 + Vite + Element Plus 实现的前后端分离博客,包含后台管理系统,支持文章、分类、标签管理、仪表盘等功能。
GitHub 地址:https://github.com/weiwosuoai/WeBlog
Gitee 地址:https://gitee.com/AllenJiang/WeBlog
XLS表达式简单列举常用的几个表达式
jx:areajx: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()}:判断集合对应动态列数据 是否为空,做好判断,写入数据动态列数据行的数据获取:
如果你的Excel工作薄里面有多个工作表,但你又需要重新命名工作表,是不是手动一个一个去修改,不但工作效率低下,而且当你修改完成后又发现漏掉一个或者某一个修改错误了,又得一遍一遍的查找修改。别再浪费时...
2024.11.21举个工作中的例子来说明,老板发给你左边的表格,让你快速转换成右边的样式,如下所示:1、数据透视表正常情况下,我们都是从右边的数据明细,使用数据透视表,得到左边的结果,简单回顾一一下,我们选中数据区域,...
2024.11.18私信回复关键词【CSV】,获取CSV工具,帮你批量转换上百个Excel文件格式!我们经常需要将表格导入 PPT 中演示。远歌知道,你肯定直接复制粘贴就完事儿了!但学过「和秋叶一起学 Excel」的人都...
2024.11.19POI概述: Jakarta POI 是一套用于访问微软格式文档的Java API。POI提供API给Java程序对Microsoft Office格式档案读和写的功能。在许多企业办公系统中,经常会...
2024.11.191.简述在java开发项目,我们经常会遇到将数据导出到Excel表格的需求 ,比较流行的使用POI、EasyExcel等。Apache POI是一个Java API,用于处理Microsoft Off...
2024.11.21