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

相关文章
|
弹性计算 IDE 安全
Alibaba Cloud Toolkit:本地应用一键部署到任何机器上
Alibaba Cloud Toolkit:本地应用一键部署到任何机器上
Alibaba Cloud Toolkit:本地应用一键部署到任何机器上
|
前端开发 easyexcel Java
Java+EasyExcel实现文件导入导出,导入导出如此简单
项目中需要Excel文件的导入与导出Excel并下载,例如,导入员工信息,导出员工信息,手动输入比较繁琐,所以本篇博文教大家如何在Java中导入Excel文件与导出Excel文件
14668 3
Java+EasyExcel实现文件导入导出,导入导出如此简单
|
Arthas 监控 Java
(十一)JVM成神路之性能调优篇:GC调优、Arthas工具详解及各场景下线上最佳配置推荐
“在当前的互联网开发模式下,系统访问量日涨、并发暴增、线上瓶颈等各种性能问题纷涌而至,性能优化成为了现时代开发过程中炙手可热的名词,无论是在开发、面试过程中,性能优化都是一个常谈常新的话题”。
1170 3
|
easyexcel
EasyExcel导出工具类
EasyExcel导出工具类
248 0
|
前端开发 JavaScript 搜索推荐
计算机Java项目|基于SpringBoot的旅游网站的设计与实现
计算机Java项目|基于SpringBoot的旅游网站的设计与实现
931 0
|
Java easyexcel
java开发excel导入导出工具类基于EasyExcel
java开发excel导入导出工具类基于EasyExcel
567 1
|
11月前
|
算法 Java
java生成一个随机的身份证号
【10月更文挑战第5天】java生成一个随机的身份证号
789 1
|
人工智能 自然语言处理 开发者
通义灵码助力开学第一课!百万开发者首选的 AI 编码工具通义灵码是如何炼成的?
我们非常高兴的宣布,通义灵码插件下载量突破400万啦!
1995 4
通义灵码助力开学第一课!百万开发者首选的 AI 编码工具通义灵码是如何炼成的?
|
网络协议
Mac根据端口查询进程id的命令
这篇文章介绍了在Mac操作系统上如何使用两种命令来查询监听特定端口的进程ID。第一种方法是使用`netstat -anp tcp -v | grep 端口号`,例如`netstat -anp tcp -v | grep 80`,这将列出所有使用端口80的TCP连接及其相关信息。第二种方法是使用`lsof -P -n -i:端口号`,例如`lsof -P -n -i:8080`,这将显示使用指定端口的进程列表,包括进程ID、用户、文件描述符等信息。文章通过示例展示了如何使用这些命令,并提供了输出结果的截图。
815 2
|
自然语言处理 IDE 开发工具
利用codeGeex在IDE中自动写注释、自动补充简单编码。
利用codeGeex在IDE中自动写注释、自动补充简单编码。
471 2

热门文章

最新文章