超级好用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表格实战教程相关推荐

  1. jxls导出Excel表格

    一.单个表格导出(一个sheet) 1.导入依赖 <!-- Execl工具包 --><dependency><groupId>org.jxls</groupI ...

  2. java 导出excel教程_Java导出Excel表格

    Java导出Excel表格 导出Excel表格需要一个poi-3.9.jar的包,该包在网上可以找到. 第一步,创建Excel对象. HSSFWorkbook workbook = new HSSFW ...

  3. 将百世快运多个快递详细信息导出EXCEL表格的实例

    一般我们会怎么批量查询百世快运单号的物流,并将详细信息以导出EXCEL表格的形式保存到电脑上呢?下面随小编一起用快递批量查询高手来操作. 教程之前,我们先看一下用快递批量查询高手批量查询百世快运物流的 ...

  4. layui 导出 excel 表格

    前言 最近这个项目中,涉及到了导出excel表格这个功能,这个后台管理使用的是layui这个框架,大体来说还是很方便,节省了很多的开发时间. 看layui的官网社区论坛,很多人都说layui自带的导出 ...

  5. elementui中有导出组件吗_Element-ui组件库Table表格导出Excel表格

    安装 npm install --save xlsx file-saver 两个插件的详细地址在下面 https://github.com/SheetJS/js-xlsx https://github ...

  6. 使用NPOI将数据库里信息导出Excel表格并提示用户下载

    使用NPOI进行导出Excel表格大家基本都会,我在网上却很少找到导出Excel表格并提示下载的 简单的代码如下 1 //mvc项目可以传多个id以逗号相隔的字符串2 public ActionRes ...

  7. java中使用jxl导出Excel表格详细通用步骤

    该方法一般接收两个参数,response和要导出的表格内容的list. 一般我们将数据库的数据查询出来在页面进行展示,根据用户需求,可能需要对页面数据进行导出. 此时只要将展示之前查询所得的数据放入s ...

  8. php 导出csv设置列宽度,php数据库导出excel表格数据-php从数据库导出csv格式的Excel表格是,字段本身就......

    PHP如何将查询出来的数据导出成excel表格(最好做... $objPHPExcel->getActiveSheet()->getDefaultColumnDimension(A)-&g ...

  9. com.alibaba.easyexcel导出指定的列_使用Python导入导出Excel表格

    这篇文章的目的是讲解使用python导入导出Excel表格,目前还不涉及数据处理,主要实现为数据的展示. 第一步,准备材料 python3.8的安装包 一个Excel表格 第二步,安装软件 pytho ...

最新文章

  1. Spark - 大数据Big Data处理框架
  2. oracle9i在window server 2003 sp2 企业版突破1.7G内存限制
  3. 【Python-ML】探索式数据分析EDA(Exploratory Data Analysis)
  4. micro/protoc-gen-micro 不见了
  5. “约见”面试官系列之常见面试题之第九十八篇之vue-router有哪几种导航钩子(建议收藏)
  6. 微博air客户端_打磨近十年,接近「完美」的 macOS 第三方微博客户端:Maipo
  7. JPDA 架构研究14 - Agent利用环境指针访问VM(对象管理篇)
  8. extra增强延迟加载
  9. [数据分析工具] Pandas 不可不知的功能(一)
  10. C#字典类型转URL参数字符串
  11. 振铃效应与样点自适应补偿(Sample Adaptive Offset,SAO)技术
  12. FIT2CLOUD入选2018 Gartner Cool Vendor
  13. 1043 : 最大值
  14. 谷歌关闭音乐搜索服务
  15. iOS播放器开发之MPMoviePlayerController
  16. 利率浮动幅度bp什么意思,浮动利率bps换算百分比
  17. mac上编码转换工具_25个用于高效编码的Mac工具
  18. 【天光学术】演讲稿:微笑面对生活
  19. Oracle 报错 28000原因和解决方法
  20. Java 堆默认大小

热门文章

  1. UE4从零开始制作数字孪生道路监测平台
  2. Linux常用的终端操作命令
  3. 视频教程-PHP零基础七天入门视频课程(免费50章)-PHP
  4. 树莓派摄像头检测到人物动作
  5. vi 查看最顶部_vi命令示例大全
  6. java md5 加密工具类_JavaMD5加密工具类
  7. logout命令详解
  8. flashback六大技术之flashback version query
  9. JSP实用教程第二章-JSP语法
  10. 如何更好的做线上引流