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的函数即可。

————————————————

版权声明:本文为CSDN博主「明明如月学长」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/w605283073/article/details/88651902

相关文章
|
前端开发 JavaScript 搜索推荐
计算机Java项目|基于SpringBoot的旅游网站的设计与实现
计算机Java项目|基于SpringBoot的旅游网站的设计与实现
1045 0
|
easyexcel Java Maven
springboot使用EasyExcel导入导出填充,解决导出乱码问题(web)
springboot使用EasyExcel导入导出填充,解决导出乱码问题(web)
1873 5
|
easyexcel Java 关系型数据库
阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel
该文章主要介绍了在Java应用中如何使用EasyExcel技术完成对Excel文件的导入和导出操作,包括环境搭建、基本概念、快速入门、进阶操作和综合应用等内容,并提供了相关代码示例和注意事项。
 阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel
|
算法 Java
java生成一个随机的身份证号
【10月更文挑战第5天】java生成一个随机的身份证号
1093 1
|
SQL 数据处理 API
10分钟了解Flink SQL使用
Flink 是一个流处理和批处理统一的大数据框架,专门为高吞吐量和低延迟而设计。开发者可以使用SQL进行流批统一处理,大大简化了数据处理的复杂性。本文将介绍Flink SQL的基本原理、使用方法、流批统一,并通过几个例子进行实践。
10分钟了解Flink SQL使用
|
easyexcel API 数据安全/隐私保护
EasyExcel使用与详细说明,EasyExcel工具类(三)
EasyExcel使用与详细说明,EasyExcel工具类
14521 2
|
运维 监控 Java
35-JVM性能优化总结-JVM性能优化到底该怎么做?
通过之前大量的案例和工具的介绍,相信大家对于JVM优化有了一定的了解和熟悉,接下来我们将整个JVM性能优化的步骤做一个总结。
413 0
|
JavaScript 前端开发
Vue组件生命周期深度剖析:从创建到销毁的八大钩子实战指南
Vue组件生命周期深度剖析:从创建到销毁的八大钩子实战指南
|
JavaScript Java 测试技术
基于Java的电影评论系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的电影评论系统的设计与实现(源码+lw+部署文档+讲解等)
264 0
|
存储 JSON Linux
新版本ONLYOFFICE8.0下载+安装+使用+测评,真的强大了不少
新版本ONLYOFFICE8.0下载+安装+使用+测评,真的强大了不少
813 0