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

相关文章
|
5月前
|
Android开发
SharePreference封装成工具类
SharePreference封装成工具类
148 1
|
8月前
|
JSON 网络协议 C#
C# 工具类
C# 工具类
53 1
|
8月前
|
Java
JavaMap工具类(MapUtils)
JavaMap工具类(MapUtils)
|
8月前
JsonUtil工具类
JsonUtil工具类
44 0
|
8月前
|
Java easyexcel 数据库连接
SpringBoot使用EasyExcel将Excel数据直接转换为类对象
SpringBoot使用EasyExcel将Excel数据直接转换为类对象
335 0
工具类-HttpClientUtil
工具类-HttpClientUtil
64 0
|
Java Android开发
okhttp工具类封装
okhttp工具类封装
238 0
|
Java 数据安全/隐私保护
Java加密解密工具类(实用)
Java加密解密工具类(实用)
Java加密解密工具类(实用)
RedisUtils 工具类
RedisUtils 工具类
157 0