JXLS导出Excel表格实战教程
超级好用Excel导出工具之JXLS
- 简介
- 引入JXLS maven依赖
- XLS Area定义标记
- each 命令是最经常使用的XLS命令
- 单元格合并命令
- JXLS导出实战
- 模板导出Excel的工具
- JXLS导出模板示例及表达式
简介
要使用jxls首先我们要了解它是什么?为什么要使用他,对比其他的一些导入导出工具他的优势是什么,下面简单的介绍一下:
jxls是一个简单的、轻量级的excel导出库,使用特定的标记在excel模板文件中来定义输出格式和布局。java中成熟的excel导出工具备pol、jxl,但他们都是使用java代码的方式来导出excel,编码效率很低且不方便维护。maven
还可使用一些工具很轻松的实现模板导出。这些工具如今还在维护,并且作得比较好的国内的有easyPOI,国外的就是这个JXLS了。
比较:
项目中有不少复杂的报表(大量单元格合并和单元格样式),easyPOI处理合并单元格时候容易出现残损的状况,poi代码维护成本高。
通过以上的介绍相信大家对于JXLS有一定的了解了,接下来讲一下需要用这个工具就先要导入依赖。
引入JXLS maven依赖
<dependency><groupId>org.jxls</groupId><artifactId>jxls-poi</artifactId><version>2.8.0</version></dependency>
通过上面的介绍我们只是知道JXLS是一个简单的、轻量级的excel导出库,但是还不知道应该如何使用,
导出需要使用模板,我们要先用office建立一个xlsx的模板(切记:新建excel工作表要使用xlsx格式,不要使用xls格式,因为使用xls导出的时候xlsx表格数据有可能会有问题)
建立好xlsx工作表了就根据实际需求在xlsx表格把需要的导出的数据画出来就可以了,就一个导出模板,赋值就要使用表达式了,表达式可以查看官网,JXLS官网地址
如何写表达式,在工作表中右键插入批注,office中添加批注快捷键(Shit + F2)
XLS Area定义标记
XLS Area 是JxlsPlus中的一个重要概念,它表明excel模板中须要被解析的矩形区域,由A1到最后一个单元格表示,有利于加快解析速度。
XLS Area 使用excel注释标注表示,它须要被定义在excel 模板的第一个单元格(A1)
jx:area(lastCell = “<AREA_LAST_CELL>”)
each 命令是最经常使用的XLS命令
命令如下:
jx:each(items=“employees” var=“employee” lastCell=“D4”)
items 上下文中集合的变量名;
var 在遍历集合的时候每一条记录的变量名;
area 该XLS Command的解析区域;
direction 数据在excel中填充的方向,默认(DOWN)向下;
select 其值为一个表达式,用来过滤数据
横向遍历显示list的数据:
jx:each(items=“data” var=“dat” lastCell=“A3” direction=“RIGHT”)
单元格合并命令
Excel注释语法
jx:merge( lastCell =“合并单元格范围” [,cols =“合并的列数”] [,rows =“合并的行数”] [,minCols =“要合并的最小列数”] [,minRows = “要合并的最小行数”] )
注意:此命令只能用于还没有合并的单元格。若是合并单元格的合并单元格范围存在,则会发生异常。
JXLS导出实战
下面做一个JXLS导出栗子
/*** 导出测试* @param query* @param response* @return* @throws IOException*/@PostMapping("export")public Result<Object> apiExport(@RequestBody ExportVo query ,HttpServletResponse response) throws IOException{ Result<Object> result = new Result<Object>();UserInfo userInfo = AppRealm.getCurrentUser();if (Common.isNull(userInfo)) {result.setCode(BussErrorCode.LOGIN_TIMEOUT).setReason("登录超时或未登录");return result;}PageHelper.startPage(query.getPageNumber(), 99999);List<ExportVo> list = service.getList(query); //实现类自行写sql查询try { response.setContentType("application/vnd.ms-excel");response.setHeader("Content-disposition", "attachment;filename="+new String(("测试导出信息_"+ new SimpleDateFormat("yyyy-MM-dd").format(new Date()).toString() +".xlsx").getBytes(), "iso-8859-1"));ServletOutputStream out = response.getOutputStream();HashMap<String, Object> data = new HashMap<>();data.put("list", list);ExcelWriter.write(this.getClass().getClassLoader().getResourceAsStream("template/template-test.xlsx"), out, data);} catch (Exception e) {log.warning(e.getMessage());}return null; }
模板导出Excel的工具
package com.cy.xgsm.util;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map;import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;/*** 通过模板导出Excel的工具* @author Dylan**/
public class ExcelWriter {/*** 根据模板输出Excel文件* @param templateInputStream 模板输入流* @param out 要写入的流,一般为文件流或网络流* @param vars 上下文变量* @throws IOException*/public static void write(InputStream templateInputStream, OutputStream out, Map<String, ? super Object> vars) throws IOException {Context context = new Context(vars); JxlsHelper.getInstance().processTemplate(templateInputStream, out, context);}/*** 根据模板输出Excel文件* @param templateFile 模板文件* @param out 要写入的流,一般为文件流或网络流* @param vars 上下文变量* @throws FileNotFoundException* @throws IOException*/public static void write(File templateFile, OutputStream out, Map<String, ? super Object> vars) throws FileNotFoundException, IOException {try (InputStream templateInputStream = new FileInputStream(templateFile)) {write(templateInputStream, out, vars);}}/*** 根据模板输出Excel文件* @param templateFileName 模板文件全名,包含路径* @param out 要写入的流,一般为文件流或网络流* @param vars 上下文变量* @throws FileNotFoundException* @throws IOException*/public static void write(String templateFileName, OutputStream out, Map<String, ? super Object> vars) throws FileNotFoundException, IOException {try (InputStream templateInputStream = new FileInputStream(templateFileName)) {write(templateInputStream, out, vars);}}}
JXLS导出模板示例及表达式
如果觉得有帮助的话,各位小伙伴可以帮忙点个赞,关注一下收藏下,支持下啦!
JXLS导出Excel表格实战教程相关推荐
- jxls导出Excel表格
一.单个表格导出(一个sheet) 1.导入依赖 <!-- Execl工具包 --><dependency><groupId>org.jxls</groupI ...
- java 导出excel教程_Java导出Excel表格
Java导出Excel表格 导出Excel表格需要一个poi-3.9.jar的包,该包在网上可以找到. 第一步,创建Excel对象. HSSFWorkbook workbook = new HSSFW ...
- 将百世快运多个快递详细信息导出EXCEL表格的实例
一般我们会怎么批量查询百世快运单号的物流,并将详细信息以导出EXCEL表格的形式保存到电脑上呢?下面随小编一起用快递批量查询高手来操作. 教程之前,我们先看一下用快递批量查询高手批量查询百世快运物流的 ...
- layui 导出 excel 表格
前言 最近这个项目中,涉及到了导出excel表格这个功能,这个后台管理使用的是layui这个框架,大体来说还是很方便,节省了很多的开发时间. 看layui的官网社区论坛,很多人都说layui自带的导出 ...
- elementui中有导出组件吗_Element-ui组件库Table表格导出Excel表格
安装 npm install --save xlsx file-saver 两个插件的详细地址在下面 https://github.com/SheetJS/js-xlsx https://github ...
- 使用NPOI将数据库里信息导出Excel表格并提示用户下载
使用NPOI进行导出Excel表格大家基本都会,我在网上却很少找到导出Excel表格并提示下载的 简单的代码如下 1 //mvc项目可以传多个id以逗号相隔的字符串2 public ActionRes ...
- java中使用jxl导出Excel表格详细通用步骤
该方法一般接收两个参数,response和要导出的表格内容的list. 一般我们将数据库的数据查询出来在页面进行展示,根据用户需求,可能需要对页面数据进行导出. 此时只要将展示之前查询所得的数据放入s ...
- php 导出csv设置列宽度,php数据库导出excel表格数据-php从数据库导出csv格式的Excel表格是,字段本身就......
PHP如何将查询出来的数据导出成excel表格(最好做... $objPHPExcel->getActiveSheet()->getDefaultColumnDimension(A)-&g ...
- com.alibaba.easyexcel导出指定的列_使用Python导入导出Excel表格
这篇文章的目的是讲解使用python导入导出Excel表格,目前还不涉及数据处理,主要实现为数据的展示. 第一步,准备材料 python3.8的安装包 一个Excel表格 第二步,安装软件 pytho ...
最新文章
- Spark - 大数据Big Data处理框架
- oracle9i在window server 2003 sp2 企业版突破1.7G内存限制
- 【Python-ML】探索式数据分析EDA(Exploratory Data Analysis)
- micro/protoc-gen-micro 不见了
- “约见”面试官系列之常见面试题之第九十八篇之vue-router有哪几种导航钩子(建议收藏)
- 微博air客户端_打磨近十年,接近「完美」的 macOS 第三方微博客户端:Maipo
- JPDA 架构研究14 - Agent利用环境指针访问VM(对象管理篇)
- extra增强延迟加载
- [数据分析工具] Pandas 不可不知的功能(一)
- C#字典类型转URL参数字符串
- 振铃效应与样点自适应补偿(Sample Adaptive Offset,SAO)技术
- FIT2CLOUD入选2018 Gartner Cool Vendor
- 1043 : 最大值
- 谷歌关闭音乐搜索服务
- iOS播放器开发之MPMoviePlayerController
- 利率浮动幅度bp什么意思,浮动利率bps换算百分比
- mac上编码转换工具_25个用于高效编码的Mac工具
- 【天光学术】演讲稿:微笑面对生活
- Oracle 报错 28000原因和解决方法
- Java 堆默认大小