项目中很可能用到导出excel文件的需求。

easyexcel代码量较小,使用简单,而且性能较佳,是一个非常好的选择。

源码地址:https://github.com/alibaba/easyexcel

工具类使用方法很简单:

1、maven依赖

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

2、工具类

package com.chujianyun.libs.excelpdf.easyexcel;import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.BaseRowModel;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.support.ExcelTypeEnum;
import org.apache.commons.io.Charsets;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
import org.apache.commons.lang3.ObjectUtils;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;/*** EasyExcel工具类** @author liuwangyanghdu@163.com* @date 2018/11/19*/
public class EasyExcelUtil {/*** 下载EXCEL文件2007版本** @throws IOException IO异常*/public static void exportExcel2007Format(EasyExcelParams excelParams) throws IOException {exportExcel(excelParams, ExcelTypeEnum.XLSX);}/*** 下载EXCEL文件2003版本** @throws IOException IO异常*/public static void exportExcel2003Format(EasyExcelParams excelParams) throws IOException {exportExcel(excelParams, ExcelTypeEnum.XLS);}/*** 根据参数和版本枚举导出excel文件** @param excelParams 参数实体* @param typeEnum    excel类型枚举* @throws IOException*/private static void exportExcel(EasyExcelParams excelParams, ExcelTypeEnum typeEnum) throws IOException {Validate.isTrue(excelParams.isValid(), "easyExcel params is not valid");HttpServletResponse response = excelParams.getResponse();ServletOutputStream out = response.getOutputStream();ExcelWriter writer = new ExcelWriter(out, typeEnum, excelParams.isNeedHead());prepareResponds(response, excelParams.getExcelNameWithoutExt(), typeEnum);Sheet sheet1 = new Sheet(1, 0, excelParams.getDataModelClazz());if (StringUtils.isNotBlank(excelParams.getSheetName())) {sheet1.setSheetName(excelParams.getSheetName());}writer.write(excelParams.getData(), sheet1);writer.finish();out.flush();}/*** 将文件输出到浏览器(导出文件)* @param response 响应* @param fileName 文件名(不含拓展名)* @param typeEnum excel类型*/private static void prepareResponds(HttpServletResponse response, String fileName, ExcelTypeEnum typeEnum) {String fileName2Export = new String((fileName).getBytes(Charsets.UTF_8), Charsets.ISO_8859_1);response.setContentType("multipart/form-data");response.setHeader("Content-disposition", "attachment;filename=" + fileName2Export + typeEnum.getValue());}public static class EasyExcelParams {/*** excel文件名(不带拓展名)*/private String excelNameWithoutExt;/*** sheet名称*/private String sheetName;/*** 是否需要表头*/private boolean needHead = true;/*** 数据*/private List<? extends BaseRowModel> data;/*** 数据模型类型*/private Class<? extends BaseRowModel> dataModelClazz;/*** 响应*/private HttpServletResponse response;public EasyExcelParams() {}/*** 检查不允许为空的属性*/public boolean isValid() {return ObjectUtils.allNotNull(excelNameWithoutExt, data, dataModelClazz, response);}public String getExcelNameWithoutExt() {return excelNameWithoutExt;}public void setExcelNameWithoutExt(String excelNameWithoutExt) {this.excelNameWithoutExt = excelNameWithoutExt;}public String getSheetName() {return sheetName;}public void setSheetName(String sheetName) {this.sheetName = sheetName;}public boolean isNeedHead() {return needHead;}public void setNeedHead(boolean needHead) {this.needHead = needHead;}public List<? extends BaseRowModel> getData() {return data;}public void setData(List<? extends BaseRowModel> data) {this.data = data;}public Class<? extends BaseRowModel> getDataModelClazz() {return dataModelClazz;}public void setDataModelClazz(Class<? extends BaseRowModel> dataModelClazz) {this.dataModelClazz = dataModelClazz;}public HttpServletResponse getResponse() {return response;}public void setResponse(HttpServletResponse response) {this.response = response;}}}

其中数据模型的范例:

package com.chujianyun.libs.excelpdf.easyexcel;import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;/*** @author liuwangyanghdu@163.com 明明如月* @date 2018/11/19*/
public class ExportInfo extends BaseRowModel {@ExcelProperty(value = "姓名" ,index = 0)private String name;@ExcelProperty(value = "年龄",index = 1)private String age;@ExcelProperty(value = "邮箱",index = 2)private String email;@ExcelProperty(value = "地址",index = 3)private String address;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}

使用时构造参数对象,调用导出excel的函数即可。

EasyExcel使用的正确姿势,工具类封装相关推荐

  1. Redis工具类封装讲解和实战

    Redis工具类封装讲解和实战     简介:高效开发方式 Redis工具类封装讲解和实战         1.常用客户端 https://redisdesktop.com/download      ...

  2. IOS开发基础之音频工具类封装AVAudioPlayer

    IOS开发基础之音频工具类封装AVAudioPlayer 源码在我的主页下面 ,项目名称是AVAudioPlayer 关键性代码 工具类的封装 // // LJAudioTool.h // AVAud ...

  3. 【JavaScript学习】JavaScript 常用工具类封装

    文章目录 1.JavaScript 常用工具类封装 (1)获得浏览器地址所有参数 (2)将json转为get参数 (3)格式校验工具类 (4)数组操作工具类 (5)表单取值工具类 (6)时间转换工具类 ...

  4. Android 图片处理工具类封装2

    http://www.2cto.com/kf/201312/263638.html Android 图片处理工具类封装 2013-12-10     0个评论   来源:Wiker Yong 的专栏  ...

  5. Redis工具类封装

    Redis工具类封装 使用redis也好几年了,总是拷贝来拷贝去的,这次干脆放在这把,每次来这拷贝,不用在工程里面找来找去了. /*** Redis工具类* @author Huangliniao* ...

  6. ElasticSearch工具类封装

    最近在项目中有看到一种比较实用的ElasticSearch工具类封装方式,特此记录便于日后查阅.         1.controller层 @RequestMapping(value = " ...

  7. XmlMapper详解及工具类封装

    一.XmlMapper说明 1.依赖包引入 <dependency><groupId>com.fasterxml.jackson.dataformat</groupId& ...

  8. EasyExcel工具类封装, 做到一个函数完成简单的读取和导出

    目录 工具包目录和依赖 工具类 Service实现 Dto类 Controller实现 工具包目录和依赖 工具包目录 依赖(请根据自己需要自行修改版本) <properties><e ...

  9. Redis工具类封装RedisUtils(两种)

    RedisTemplate工具类1 本文参考:https://blog.it-follower.com/posts/2563248908.html SpringBoot项目集成Redis相当简单,只需 ...

最新文章

  1. 机器人编程语言python-进行人工智能机器人研发,应该选择哪种编程语言?
  2. Html 内联元素、外联元素 和 可变元素
  3. v-show 与 v-if 的区别
  4. listView动态加载数据分页
  5. 抗击海冰 地理信息系统来帮忙
  6. C++经典面试题汇总
  7. LeetCode 552. 学生出勤记录 II(动态规划)
  8. python中的保护对象数据
  9. python信息管理系统实战_最新python入门+进阶+实战课堂教学管理系统开发全套完整版...
  10. Getting started with Bitcoin
  11. 苹果电脑裸机和不裸机的区别_将Kubernetes带到裸机边缘
  12. 【MyBatis笔记】08-输出类型
  13. 区分PO,VO,DAO,BO,POJO
  14. 【图像跟踪】基于matlab GUI均值漂移图像跟踪【含Matlab源码 743期】
  15. hive sql 行列转换
  16. IntelliJ IDEA 中文语言包插件
  17. 骑行日志2011滇藏珠峰尼泊尔青藏 - 记那些逝去的青春
  18. thinkpad 重装--AHCI 导致系统蓝屏---迅盘
  19. 永信至诚助首届民航网络安全攻防技能竞赛决赛圆满收官
  20. Harmonyos官网申请的,HarmonyOS 2.0手机开发者Beta公测招募,普通用户有没有必要申请?...

热门文章

  1. O2O分享6:O2O的社会化营销(下)
  2. Windows10电脑文件自动同步备份工具有哪些?
  3. 【软件工具】Zotero+坚果云实现多台电脑同步
  4. 2009年“五一”假期市民旅游指南
  5. 杰理之去掉原唱人声实现【篇】
  6. 软实力:十大调查研究咨询公司助力中国梦
  7. P1074 靶形数独
  8. 嵌入式软件工程师职业路线
  9. 电子计算机发明于1946年对不对,国家公务员测验考试常识题.doc
  10. 八年级计算机教案下册,长春版八年级信息技术下册全册教案