EasyExcel使用的正确姿势,工具类封装
项目中很可能用到导出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使用的正确姿势,工具类封装相关推荐
- Redis工具类封装讲解和实战
Redis工具类封装讲解和实战 简介:高效开发方式 Redis工具类封装讲解和实战 1.常用客户端 https://redisdesktop.com/download ...
- IOS开发基础之音频工具类封装AVAudioPlayer
IOS开发基础之音频工具类封装AVAudioPlayer 源码在我的主页下面 ,项目名称是AVAudioPlayer 关键性代码 工具类的封装 // // LJAudioTool.h // AVAud ...
- 【JavaScript学习】JavaScript 常用工具类封装
文章目录 1.JavaScript 常用工具类封装 (1)获得浏览器地址所有参数 (2)将json转为get参数 (3)格式校验工具类 (4)数组操作工具类 (5)表单取值工具类 (6)时间转换工具类 ...
- Android 图片处理工具类封装2
http://www.2cto.com/kf/201312/263638.html Android 图片处理工具类封装 2013-12-10 0个评论 来源:Wiker Yong 的专栏 ...
- Redis工具类封装
Redis工具类封装 使用redis也好几年了,总是拷贝来拷贝去的,这次干脆放在这把,每次来这拷贝,不用在工程里面找来找去了. /*** Redis工具类* @author Huangliniao* ...
- ElasticSearch工具类封装
最近在项目中有看到一种比较实用的ElasticSearch工具类封装方式,特此记录便于日后查阅. 1.controller层 @RequestMapping(value = " ...
- XmlMapper详解及工具类封装
一.XmlMapper说明 1.依赖包引入 <dependency><groupId>com.fasterxml.jackson.dataformat</groupId& ...
- EasyExcel工具类封装, 做到一个函数完成简单的读取和导出
目录 工具包目录和依赖 工具类 Service实现 Dto类 Controller实现 工具包目录和依赖 工具包目录 依赖(请根据自己需要自行修改版本) <properties><e ...
- Redis工具类封装RedisUtils(两种)
RedisTemplate工具类1 本文参考:https://blog.it-follower.com/posts/2563248908.html SpringBoot项目集成Redis相当简单,只需 ...
最新文章
- 机器人编程语言python-进行人工智能机器人研发,应该选择哪种编程语言?
- Html 内联元素、外联元素 和 可变元素
- v-show 与 v-if 的区别
- listView动态加载数据分页
- 抗击海冰 地理信息系统来帮忙
- C++经典面试题汇总
- LeetCode 552. 学生出勤记录 II(动态规划)
- python中的保护对象数据
- python信息管理系统实战_最新python入门+进阶+实战课堂教学管理系统开发全套完整版...
- Getting started with Bitcoin
- 苹果电脑裸机和不裸机的区别_将Kubernetes带到裸机边缘
- 【MyBatis笔记】08-输出类型
- 区分PO,VO,DAO,BO,POJO
- 【图像跟踪】基于matlab GUI均值漂移图像跟踪【含Matlab源码 743期】
- hive sql 行列转换
- IntelliJ IDEA 中文语言包插件
- 骑行日志2011滇藏珠峰尼泊尔青藏 - 记那些逝去的青春
- thinkpad 重装--AHCI 导致系统蓝屏---迅盘
- 永信至诚助首届民航网络安全攻防技能竞赛决赛圆满收官
- Harmonyos官网申请的,HarmonyOS 2.0手机开发者Beta公测招募,普通用户有没有必要申请?...