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/zh-tw/n/332700.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HINLJ的頭像HINLJ
上一篇 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

發表回復

登錄後才能評論