目录

Easyexcel 表格工具概述

Easyexcel 常用 API

Easyexcel 读 Excel

Easyexcel 写 Excel

Easyexcel  上传、下载

解决下载文件名称乱码


Easyexcel 表格工具概述

1、工作中使用 excel 表格处理数据是很常见的操作,经常会使用 excel 文件来导入数据或者导出数据。

2、Java 解析、生成 Excel 比较有名的框架有 Apache poi、jxl,但他们都存在一个严重的问题就是非常的耗内存,poi 有一套 SAX 模式的 API 可以一定程度的解决一些内存溢出的问题,但仍有一些缺陷,比如版本兼容、代码臃肿等。

3、easyexcel 是 Alibaba 的 开源的一款快速、简单、可避免 OOM 的 java 处理 Excel 工具。easyexcel 重写了 poi 对 07 版 Excel 的解析,对原本一个 3M 的 excel 用 POI sax 需要 100M 左右的内存降低到几 M,并且再大的 excel 也不会出现内存溢出。

4、github 开源地址:https://github.com/alibaba/easyexcel,源码中提供了丰富的示例,推荐参考。

Easyexcel 依赖

1、本文环境:Spring boot 2.1.4 + Java JDK 1.8 + easyexcel 2.2.6,新建一个 Spring boot web 应用,然后 pom.xml 文件导入 easyexcel 依赖如下。

        <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version></dependency>

2、easyexcel 内部依赖项如下(easyexcel 是对 poi 的改写,同时使用了 ehcache 做缓存,提升效率):

Group / Artifact
cglib » cglib
org.apache.poi » poi
org.apache.poi » poi-ooxml
org.apache.poi » poi-ooxml-schemas
org.ehcache » ehcache
org.slf4j » slf4j-api

Easyexcel 常用 API

1、EasyExcel 类是个空类,也是整个框架的核心类,方法全部继承于 EasyExcelFactory,目的是编码起来名称更加简短直观,与整个框架的名称一致,常用方法如下:

EasyExcel 类常用方法

====读取 excel 文件方法====

ExcelReaderBuilder read(String pathName)

ExcelReaderBuilder read(String pathName, Class head, ReadListener readListener)

ExcelReaderBuilder read(String pathName, ReadListener readListener)

ExcelReaderBuilder read(File file)

ExcelReaderBuilder read(File file, Class head, ReadListener readListener)

ExcelReaderBuilder read(File file, ReadListener readListener)

ExcelReaderBuilder read(InputStream inputStream)

ExcelReaderBuilder read(InputStream inputStream, Class head, ReadListener readListener)

ExcelReaderBuilder read(InputStream inputStream, ReadListener readListener)

1、可以读取本地 excel 文件,也可以网络文件(比如文件上传),网络文件使用 InputStream 参数即可。

2、pathName、file、inputStream 参数都是需要读取的 excel 文件。

3、head:是一个实体对象,将实体对象的属性与 excel 文件的列进行对应,一个实体对象就是 excel 中的一行数据。

4、readListener 是读取监听器,每读取一行标题、或者一行正文数据,都会进入相应的回调方法,然后可以对数据进行处理。

====写入 excel 文件方法====
ExcelWriterBuilder write(String pathName)
ExcelWriterBuilder write(String pathName, Class head)
ExcelWriterBuilder write(File file)
ExcelWriterBuilder write(File file, Class head)
ExcelWriterBuilder write(OutputStream outputStream)
ExcelWriterBuilder write(OutputStream outputStream, Class head)

1、可以写入到本地文件,也可以是网络文件(如文件下载),网络文件使用 OutputStream 参数即可。
2、head:是一个实体对象,将实体对象的属性与 excel 文件的列进行对应,一个实体对象就是 excel 中的一行数据。

2、ExcelWriterBuilder 是 excel 写构建器,用于设置写入操作:

ExcelWriterBuilder 常用方法

ExcelWriterSheetBuilder sheet(String sheetName):指定 sheet 的名称,默认为 Sheet1、Sheet2...,Sheet 是excel 中的工作簿
ExcelWriterSheetBuilder sheet(Integer sheetNo):设置 sheet 的序号,从 0 开始,比如写入到第 3 页,则 sheetNo 为 2。
ExcelWriterSheetBuilder sheet(Integer sheetNo, String sheetName):同时指定 sheet 序号与名称。

autoCloseStream(Boolean autoCloseStream):设置是否自动关闭流,默认为 true,设置成 false 后,需要自己手动关流。
ExcelWriter build():构建 ExcelWriter 写对象。
excludeColumnFiledNames(Collection<String> excludeColumnFiledNames):写入的时候,指定忽略的列,忽略哪些属性不写入到 excel 文件
includeColumnFiledNames(Collection<String> includeColumnFiledNames):只输出自定义的列
head(List<List<String>> head):指定写入时的表头/表头,使用列表指定
head(Class clazz):指定写入时的表头/表头,使用实体对象指定
registerWriteHandler(WriteHandler writeHandler):自定义写处理器,如自定义样式

2、设置模板文件,比如写入的时候,希望将数据写入到一个模板文件中去,支持本地文件和网络文件。
withTemplate(String pathName)
withTemplate(File templateFile)
withTemplate(InputStream templateInputStream)

3、ExcelReaderBuilder 是 excel 读构建器,用于设置读取操作:

ExcelReaderSheetBuilder sheet(String sheetName):读取指定名称的 sheet。
ExcelReaderSheetBuilder sheet(Integer sheetNo):读取指定序号的 sheet,从 0 开始。
ExcelReaderSheetBuilder sheet(Integer sheetNo, String sheetName):读取指定序号和名称的 sheet

4、常用注解:

@ExcelIgnore 标识在字段上,表示忽略这个字段不与 excel 中的列匹配,即忽略此字段读取与写入
@ColumnWidth 指定写入的 excel 的列宽,包括标题与正文内容,标识在类上对所有列生效,标识在字段上对单个字段生效
@ExcelProperty 标识实体中的属性与 excel 文件中的列相对应,常用属性如下:
   index:表示下标匹配,从0开始,0 应表格中的第1列的值,1 对应 excel 中第二列的值,依此类推
   value:表示名称匹配,直接指明对应表中的哪一列,值是一个字符串数组,按顺序为一级标题、二级标题,一级标题相同时,会自动合并居中。
官方不建议 index 和 name 同时使用,同一个对象中,要么只用 index,要么只用 name。
@HeadRowHeight 指定写入的 excel 的标题的行高,不包括正文内容,只能标记在类上、接口上、枚举上
@HeadStyle

自定义excel表格标题单元格样式,比如前/背景色等,fillPatternType 是填充模式,fillForegroundColor 表示前景色,值从 {@link IndexedColors} 枚举中取,默认标题会为灰色,字体为黑色,大小为 14

@HeadFontStyle 自定义表格标题的字体样式、比如大小、颜色、字体、下划线等等。默认为 14,居中显示。fontHeightInPoints 表示字体大小,color 表示样式,值从 {@link IndexedColors} 枚举中取
@ContentStyle 设置表格中正文内容单元格的样式,比如前/背景色等,默认无。同理 @HeadStyle
@ContentFontStyle 设置表格中正文内容的样式,比如字体、颜色、大小等,默认大小为 11。同理 @HeadFontStyle

5、AnalysisEventListener - excel 读取事件监听器:

1、AnalysisEventListener 抽象类实现了 ReadListener 接口,
2、自定义的读取监听器需要实现此抽象类,然后实现 invoke 方法,
3、读取监听器的目的在于能捕获读取到的每一条数据,这样可以轻松的对每一条数据进行处理,比如存库、清洗、验证、记录日志等
4、读取监听器实例不能交由 spring 容器管理,EasyExcel.read 时只能通过 new 读取监听器对象,如果读取监听器中需要用到哪个 bean,则可以通过构造器参数传入。
5、invoke :每成功解析一条数据,都会进入此方法
6、invokeHeadMap:每成功解析完成一行表头,都会进入此方法
7、doAfterAllAnalysed:所有数据解析完成后进入此方法
8、onException:解析异常时进入本方法,如果抛出异常,则停止读取,否则继续读取下一行

Easyexcel 读 Excel

实际生产中使用上面的上传、下载多一些,本节是对读 excel 文件的更深入的介绍与汇总。

1、本节演示的源码地址:src/main/java/com/wmx/excel/test/ExcelReadTest.java · 汪少棠/h2Smil - Gitee.com

2、本节演示的 excel 文件:https://gitee.com/wangmx1993/h2-smil/tree/master/src/main/resources/excelTemplates

3、本文的 demo 是在 easyExcel 官方 demo 的基础上修改而来,本节源码中加入了更详细的注释,更多内容建议参考官网。

Easyexcel 写 Excel

实际生产中使用上面的上传、下载多一些,本节是对写 excel 文件的更深入的介绍与汇总。

1、本节演示的源码地址:src/main/java/com/wmx/excel/test/ExcelWriteTest.java · 汪少棠/h2Smil - Gitee.com

2、本节演示的 excel 文件:https://gitee.com/wangmx1993/h2-smil/tree/master/src/main/resources/excelTemplates

3、本文的 demo 是在 easyExcel 官方 demo 的基础上修改而来,本节源码中加入了更详细的注释,更多内容建议参考官网。

Easyexcel  上传、下载

实际生产中使用上传、下载多一些,对于读/写操作更多的介绍可以参考下面的 "读 Excel "、"写 Excel "章节。

1、本节演示的源码地址:https://gitee.com/wangmx1993/h2-smil/tree/master/src/main/java/com/wmx/excel/web

2、本节演示的 excel 文件:https://gitee.com/wangmx1993/h2-smil/tree/master/src/main/resources/excelTemplates

3、本文的 demo 是在 easyExcel 官方 demo 的基础上修改而来,本节源码中加入了更详细的注释,更多内容建议参考官网。

解决下载文件名称乱码

1、某些系统或者浏览器在下载文件的时候,可能出现文件名称乱码的现象,如下所示。

2、解决方案的核心代码如下,就是修改返回的头信息。

 public static void returnErrorExlForColumn(Map<String, String> progressData, List<Map<String, Object>> errorData,List<UiRunColumn> uvColumnList, UiRunView uvView, HttpServletRequest request, HttpServletResponse response) throws IOException {OutputStream os = null;// 工作薄Workbook wb = null;try {wb = FWExcelCreateUtil.expExcelDataByPt(errorData, uvView, uvColumnList);if (wb != null) {//动态决定导出文件的后缀名String suffix = ".xlsx";if(wb instanceof HSSFWorkbook) {suffix = ".xls";}//判断客户端是否为 IE浏览器boolean isMSIE = isMSBrowser(request);//文件名称String fileName = uvView.getName() + "(错误信息)";response.setContentType("application/vnd.ms-excel");if (isMSIE) {//解决IE浏览器文件名称乱码fileName = new String(fileName.getBytes("gb2312"), "iso8859-1");response.setHeader("Content-Disposition", "inline; filename=" + fileName + suffix);} else {//万能文件名称乱码问题解决fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");response.setHeader("Content-disposition", "attachment;filename=" + fileName + suffix);}os = response.getOutputStream();wb.write(os);}} catch (Exception ex) {log.error(ExceptionUtils.getStackTrace(ex));} finally {os.flush();os.close();if (errorData.size() > 999){//清除缓存数据((SXSSFWorkbook)wb).dispose();}}}/*** 判断客户端是否为 IE浏览器* @param request :客户端请求* @return*/public static boolean isMSBrowser(HttpServletRequest request) {String userAgent = request.getHeader("User-Agent");String[] IEBrowserSignals = {"MSIE", "Trident", "Edge"};for (String signal : IEBrowserSignals) {if (StringUtils.contains(userAgent, signal)) {return true;}}return false;}

Alibaba 表格开源工具 easyexcel 快速使用教程相关推荐

  1. Alibaba开源工具EasyExcel读写Excel文件

    前言 工作中使用 excel 表格处理数据是很常见的操作,经常会使用 excel 文件来导入数据或者导出数据,是不是脑海中已经思考有哪些处理excel框架? 小编之前呢就知道Java 解析.生成 Ex ...

  2. 华为开源构建工具_5个开源工具可快速构建地图应用

    华为开源构建工具 近年来,地理信息系统(GIS)引起的所有关注都可能使您认为它们是新事物. 实际上,超过160年前,地理空间数据在确定1854年伦敦霍乱致命爆发的来源方面发挥了重要作用. 当地医生约翰 ...

  3. .NET Core 开源工具 IPTools - 快速查询 IP 地理位置、经纬度信息

    快速查询IP信息,支持国内和国外IP信息查询,支持查询经纬度,地理位置最高支持到城市. 1. IPTools.China 快速查询中国IP地址信息,包含国家.省份.城市.和网络运营商.非中国IP只支持 ...

  4. python测试开发教程_python3测试工具开发快速入门教程

    现有的优秀python教程大多来自国外,但是翻译过来文章,有些丧失了原意.且现有的python3教程,很少有结合项目能快速上手.为此我们退出为零基础的初学者提供python入门教程(资深python使 ...

  5. python3.7输出语句_python3测试工具开发快速入门教程7输入和输出

    python有多种输出方式:屏幕打印数据,或者写入文件. 格式化输出 我们有两种大相径庭地输出值方法:表达式语句* 和 print() 函数(第三种方法使用文件对象的write()方法,标准文件输出可 ...

  6. 运维工具 Ansible 快速入门教程

    Ansible 简介 Ansible 是新出现的自动化运维工具,基于 Python 开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配 ...

  7. 用rapid-framework开源工具快速生成SSH的网站框架MVC模式

    使用开源工具rapid-framework快速搭建ssh项目框架 环境 IDE:myeclipse 8.5 详细搭建过程: 一:打开myeclipse 8.5新建一个web工程,取名web_frame ...

  8. EasyExcel 快速生成Excel工具的使用

    EasyExcel 快速生成Excel工具的使用 前言 当我从数据库查询到数据,如何将它变成Excel表格的形式展示 一个简单的导出模板如下 导入依赖 <!-- easyexcel-->& ...

  9. Alibaba 开源工具 Arthas 使用

    大家好,我是烤鸭: 很长时间没更新了,最近太忙了,只能抽空水点文章了,今天给大家介绍的是阿里的开源工具 Arthas 的使用. 1. 开源地址 Arthas 是Alibaba开源的Java诊断工具 h ...

  10. 开源集锦(五)开源框架和快速开发工具类

    Volley https://github.com/stormzhang/AndroidVolley http://blog.csdn.net/t12x3456/article/details/922 ...

最新文章

  1. html5的video怎么把里面的控制器移出来_日产Pro-Pilot的ADAS控制器拆解
  2. HTML5开发笔记:初窥CANVAS,上传canvas图片到服务器
  3. 混合办公时代来了?携程试点每周两天居家办公,76%的员工主动报名!
  4. QMainWindow多线程demo
  5. linux lite 安装步骤,Linux Lite第一个支持Linux 4.14及如何安装
  6. go语言渐入佳境[9]-doubleloop
  7. linux 命令全集
  8. Linux下文本编辑 .
  9. 向Spark集群提交任务
  10. [导入]Asp.Net MVC实践 - 探索UrlRouting并分析UrlHelper (基于ASP.NET MVC Preview 3)
  11. 【Mysql】之基础sql语句模板
  12. ArrayList源码剖析
  13. noi.openjudge 二分法求函数的零点
  14. 本周AI热点回顾:「时空版」Transformer训练速度远超3D CNN;拒绝内卷的AI狼火了!不想抓羊只想躺!...
  15. 云呐|动环监控设备维护与常见故障处理
  16. 【简短测评】在线音乐播放器,哪一款适合写代码时候使用
  17. YOLO3+GPU(gtx1060)
  18. Python基于PHP+MySQL的个人网页设计与实现
  19. stm32f103电子钟心得体会_STM32中的时钟
  20. R语言 基于共现提取《雪中悍刀行》人物关系并画网络图

热门文章

  1. sql 2005 数据库升级2008 数据库 和2005 数据附加2008数据备份文件
  2. onclick 获取img 里面的id_续航可达550公里,ID.4 CROZZ打碎“纯电动汽车续航短”偏见...
  3. 拓端tecdat|使用R语言随机波动模型SV处理时间序列中的随机波动率
  4. python import包导出变量_Python关于import的实验(10) 利用__init__.py文件将变量和包下的模块作为包的属性...
  5. Linux中配置pacman镜像源(manjaro)
  6. spring cloud学习笔记01
  7. actor模型 java框架,actor模型(actor模式优缺点)
  8. keras利用flow_from_directoryt自己构建数据集
  9. win7+vs2015+pcl1.8.0配置
  10. HTML中段落标签和换行标签分别是,HTML 基本标签