EasyExcel导出Excel详解

一、EasyExcel简介

EasyExcel是一个基于Java的开源工具,几乎不需要学习就可以编写Excel,生成Excel文件并读取Excel文件。该工具可以帮助用户轻松处理Excel文件,是Apache POI 项目的增强版。

该工具旨在让在Java EE和Spring应用程序中处理Excel表格变得简单。

以下是EasyExcel的一些核心特性:

  • 支持GoogleProtobuf和java的多种标准内容(包括Java8)的转换。
  • 几乎支持所有的Excel常规操作,包括单元格宽度、类型转换、数据格式和多种风格等。
  • 低内存占用。
  • 支持将Excel导出为多种格式,如CSV、HTML、JSON和TSV。

二、EasyExcel的安装及使用方法

使用EasyExcel之前,需要先引入相关的依赖包。可以在pom.xml文件中加入以下代码块即可:

  <dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>easyexcel</artifactId>
     <version>2.2.11</version>
  </dependency>

EasyExcel提供了丰富的API,可以清楚地表达你想做什么。以下是一个简单的例子:

  /**
   * 导出 Excel 例子
  **/
  public void exportExcel() throws IOException {
      ServletOutputStream out = response.getOutputStream();
      try {
          response.reset();
          response.setContentType("application/octet-stream;charset=utf-8");
          response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
          // 获取需要导出的数据
          List<DemoData> list = getData();
          EasyExcel.write(out, DemoData.class).sheet("模板").doWrite(list);
      } catch (Exception e) {
          LOGGER.error("导出失败", e);
      } finally {
          out.close();
      }
  }

三、EasyExcel的常见用法

1、简单数据导出

EasyExcel提供了一种简单的方法来将集合的数据导出到Excel文档中。以下是一个简单的代码示例:

  /**
   * 最简单的导出 Excel 的例子
  **/
  
  @Test
  public void simplestWrite() throws IOException {
      String filename = "/Users/alibaba/IdeaProjects/easyexcel/src/test/java/com/alibaba/easyexcel/test/demo/write/simple.xls";
      // 这里需要指定写用哪个 class 去写
      EasyExcel.write(filename, DemoData.class).sheet("模板").doWrite(data());
  }

2、复杂报表导出

EasyExcel支持复杂的表格布局和实现自定义样式。以下代码展示了如何使用EasyExcel在单个Excel文档中插入多个Sheet的代码:

  /**
   * 复杂报表示例
  **/
  public void complexWrite() throws IOException {
      String filename = "/Users/alibaba/IdeaProjects/easyexcel/src/test/java/com/alibaba/easyexcel/test/demo/write/complex.xls";
      OutputStream out = new FileOutputStream(filename);
      try {
          // 这里 需要指定写用哪个 class 去写
          // 如果这里设为null,则代表这个 sheet 只有表头,还没有内容,这提供了一种动态生成 Sheet 的方式
          Sheet sheet1 = new Sheet(1, 0, WriteModel.class, "Sheet1", null);
          sheet1.setTableStyle(createTableStyle());
          // 注册自定义监听器
          this.registerCustomListeners();
          EasyExcel.write(out, WriteModel.class).registerWriteHandler(this.customSheetWriteHandler)
             .registerWriteHandler(this.customSheetWriteHandler2).registerWriteHandler(this.customSheetWriteHandler3)
             .head(createTestListStringHead()).sheet("模板").doWrite(data());
          out.flush();
      } finally {
          // 千万别忘记关闭流
          out.close();
      }
  }

3、大量数据导出

随着Excel文件中的数据量的增长,内存的占用量会急剧上升。EasyExcel提供了一种专门优化内存的高效方法,通过将列表分批写入到文档中,以节省大量内存。

  /**
   * 大量数据导出(分批次导出)
  **/
  public void repeatedWrite() throws IOException {
      String fileName = "/Users/alibaba/IdeaProjects/easyexcel/src/test/java/com/alibaba/easyexcel/test/demo/write/repeatedWrite.xlsx";
      try (OutputStream out = new FileOutputStream(fileName)) {
          ExcelWriter excelWriter = EasyExcel.write(out).head(head()).build();
          WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();
          int total = getData().size();
          int count = 100000;
          int round = total % count == 0 ? total / count : total / count + 1;
          for (int i = 0; i < round; i++) {
              List<DemoData> list = getData().stream().skip(i * count).limit(count).collect(Collectors.toList());
              excelWriter.write(list, writeSheet);
              excelWriter.finish();
          }
      } catch (IOException ex1) {
          ex1.printStackTrace();
      }
  }

4、Excel数据读取

EasyExcel支持用户将Excel文件反序列化为Java对象,从而可以极大地加速数据处理。EasyExcel自带Map和List读取样式和丰富的数据读取方式。以下代码演示了如何使用EasyExcel对Excel进行读取:

  /**
   * 读取Excel示例
  **/
  public void readExcel() {
      String filename = "classpath:simple.xlsx";
      // 这里 只要,然后读取第一个sheet 同步返回数据流,需要自己关闭流
      try (InputStream inputStream = FileUtil.getInputStream(filename)) {
          EasyExcel.read(inputStream, DemoData.class, new DemoDataListener()).sheet().doRead();
      } catch (IOException ex1) {
          ex1.printStackTrace();
      }
  }

四、小结

EasyExcel是一个十分实用的Java Excel操作工具。它提供了API,能够快速自定义表格样式,用于Java EE和Spring应用程序中处理Excel表格变得简单。在实际应用中,我们可以根据实际需要选择EasyExcel工具对表格进行操作,为数据处理提供极大的方便。

原创文章,作者:HINLJ,如若转载,请注明出处:https://www.506064.com/n/332700.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
HINLJHINLJ
上一篇 2025-01-24 18:47
下一篇 2025-01-27 13:34

相关推荐

  • 为什么不能用Microsoft Excel进行Python编程?

    Microsoft Excel是一个广泛使用的数据分析工具,但是它不能直接用于Python编程。这是因为Microsoft Excel并不是一个编程工具,它的主要功能是进行数据处理…

    编程 2025-04-29
  • 基尼系数Excel计算模板

    这篇文章将介绍基尼系数Excel计算模板,为大家详细阐述如何使用Excel进行基尼系数的计算。 一、模板下载及导入 首先需要下载基尼系数的Excel计算模板,可以在Excel中通过…

    编程 2025-04-28
  • 使用ReoGrid操作Excel的WPf应用

    本文将详细阐述如何使用ReoGrid来操作Excel,重点介绍在WPF应用程序中使用ReoGrid的方法及注意点。 一、ReoGrid简介 ReoGrid是一个基于.NET的开源组…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25

发表回复

登录后才能评论