EasyExcel 導出全面解析

一、EasyExcel 簡介

EasyExcel 是一個開源的跨平台 Java 處理 Excel 的第三方庫,它採用了註解方式設置 Excel 表格的屬性,可以輕鬆實現 Excel 的讀寫、導入導出等操作。EasyExcel 支持 XLS 和 XLSX 兩種 Excel 格式,並且使用效率高、易於使用、具有完善的文檔和示例支持。

二、EasyExcel 導出的優點

相比於 POI,EasyExcel 導出的優點在於如下幾點:

  1. 採用註解方式設置 Excel 表格的屬性,實現代碼的可讀性和可維護性;
  2. 採用流式寫入方式,大幅度減少內存佔用,提升導出效率;
  3. 支持多線程導出,進一步提升導出效率;
  4. 支持直接導出到 FTP、SFTP、HTTP 等網路存儲中;
  5. 可以輕鬆實現對特殊的格式(如日期格式、貨幣格式等)進行設置;
  6. 具有完善的文檔和示例支持,容易上手。

三、EasyExcel 導出的基本使用方法

1. 導出簡單 Excel 表格

下面的示例演示了如何使用 EasyExcel 導出一個簡單的 Excel 表格:


public class ExportDemo {

    @Test
    public void simpleExport() {
        // 1. 創建需要導出的 Excel 對象
        ExcelWriter excelWriter = EasyExcel.write("demo.xlsx").build();

        // 2. 定義導出的表格的表頭和數據集
        Sheet sheet1 = new Sheet(1, 0);
        sheet1.setSheetName("sheet1");
        List<List> data = new ArrayList<List>();
        List head = new ArrayList();
        head.add("第一列");
        head.add("第二列");
        data.add(head);
        for(int i = 0; i < 10; i++) {
            List tmpData = new ArrayList();
            tmpData.add("列1的數據:" + i);
            tmpData.add("列2的數據:" + i);
            data.add(tmpData);
        }

        // 3. 導出表格
        excelWriter.write(data, sheet1);
        excelWriter.finish();
    }

}

以上代碼實現了導出一個簡單的 Excel 表格,通過 ExcelWriter 對象的 write() 方法將數據集寫入到表格中即可完成導出。

2. 導出複雜 Excel 表格

EasyExcel 可以很方便地導出帶有樣式、圖片、超鏈接等複雜 Excel 表格。下面的示例演示了如何使用 EasyExcel 導出帶有圖片、樣式的 Excel 表格:


public class ExportDemo {

    @Test
    public void complexExport() throws IOException {
        // 1. 創建需要導出的 Excel 對象
        String fileName = "demo.xlsx";
        OutputStream out = new FileOutputStream(fileName);
        ExcelWriter excelWriter = EasyExcel.write(out).build();

        // 2. 定義導出的表格的表頭和數據集
        Sheet sheet = new Sheet(1, 0);
        sheet.setSheetName("sheet1");
        List<List> data = initData();
        sheet.setHead(initHead());
        sheet.setAutoWidth(Boolean.TRUE);

        // 3.導出圖片到磁碟並且插入到表格中
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        BufferedImage bufferImg = ImageIO.read(new File("D://logo.png"));
        ImageIO.write(bufferImg, "png", byteArrayOutputStream);
        // 列寬默認值為 1,這裡要定義為圖片的實際長寬值
        byte[] imageBytes = byteArrayOutputStream.toByteArray();
        Image image = new Image(new ByteArrayInputStream(imageBytes), 5, 5, 3, 7);
        sheet.addImage(image);

        // 4.導出表格
        excelWriter.write1(data, sheet);
        excelWriter.finish();
    }

    private List<List> initData() {
        List<List> dataList = new ArrayList();
        for (int i = 0; i < 10; i++) {
            List item = new ArrayList();
            item.add(i);
            item.add(i + " 的名稱");
            item.add(100 + i);
            item.add("https://www.baidu.com");
            item.add(new Date());
            dataList.add(item);
        }
        return dataList;
    }

    private List<List> initHead() {
        List<List> head = new ArrayList();
        List head0 = new ArrayList();
        List head1 = new ArrayList();
        List head2 = new ArrayList();
        List head3 = new ArrayList();
        List head4 = new ArrayList();
        head0.add("編號");
        head1.add("名稱");
        head2.add("價格");
        head3.add("超鏈接");
        head4.add("日期");
        head.add(head0);
        head.add(head1);
        head.add(head2);
        head.add(head3);
        head.add(head4);
        return head;
    }

}

以上代碼首先創建了一個 ExcelWriter 對象,然後定義表頭和數據和圖片等內容,在寫入 Excel 表格時將這些內容一起寫入即可。

3. 設置單元格樣式

EasyExcel 可以非常方便地設置單元格樣式,支持字體、背景顏色、粗體、斜體等樣式設置。下面的示例演示了如何使用 EasyExcel 設置單元格的樣式。


public class StyleDemo {

    @Test
    public void setStyle() throws IOException {
        // 1. 創建需要導出的 Excel 對象
        String fileName = "style.xlsx";
        OutputStream out = new FileOutputStream(fileName);
        ExcelWriter excelWriter = EasyExcel.write(out).build();

        // 2. 定義導出的表格的表頭和數據集
        Sheet sheet = new Sheet(1, 0);
        sheet.setSheetName("sheet1");
        List<List> data = initData();
        sheet.setHead(initHead());
        sheet.setAutoWidth(Boolean.TRUE);

        // 3. 設置單元格樣式
        WriteCellStyle headCellStyle = new WriteCellStyle();
        headCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
        WriteFont headFont = new WriteFont();
        headFont.setFontHeightInPoints((short) 14);
        headFont.setBold(true);
        headCellStyle.setWriteFont(headFont);
        headCellStyle.setShrinkToFit(true);
        headCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        headCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);

        // 4. 導出表格
        excelWriter.write(data, sheet, headCellStyle);
        excelWriter.finish();
    }

    private List<List> initData() {
        List<List> dataList = new ArrayList();
        for (int i = 0; i < 10; i++) {
            List item = new ArrayList();
            item.add(i);
            item.add(i + " 的名稱");
            item.add(100 + i);
            item.add("https://www.baidu.com");
            item.add(new Date());
            dataList.add(item);
        }
        return dataList;
    }

    private List<List> initHead() {
        List<List> head = new ArrayList();
        List head0 = new ArrayList();
        List head1 = new ArrayList();
        List head2 = new ArrayList();
        List head3 = new ArrayList();
        List head4 = new ArrayList();
        head0.add("編號");
        head1.add("名稱");
        head2.add("價格");
        head3.add("超鏈接");
        head4.add("日期");
        head.add(head0);
        head.add(head1);
        head.add(head2);
        head.add(head3);
        head.add(head4);
        return head;
    }
}

以上代碼使用 WriteCellStyle 和 WriteFont 分別設置單元格樣式和字體樣式,在寫入 Excel 表格時將這些樣式一起寫入即可。

4. 導出大批量數據

EasyExcel 通過採用流式寫入的方式,非常適合導出大批量數據,同時支持多線程導出,極大地提升了導出效率。下面的示例演示了如何使用 EasyExcel 導出大批量數據。


public class BigDataDemo {

    @Test
    public void bigDataExport() {
        // 1. 創建需要導出的 Excel 對象
        String fileName = "big_data.xlsx";
        ExcelWriter excelWriter = EasyExcel.write(fileName).build();

        // 2. 定義導出的表格的表頭和數據集
        Sheet sheet = new Sheet(1, 0);
        sheet.setSheetName("Sheet1");
        List<List> data = new ArrayList();
        for (int i = 0; i < 100000; i++) {
            List row = new ArrayList();
            row.add(i);
            row.add("名稱 " + i);
            row.add(new Date());
            row.add(200 + i);
            row.add("https://www.baidu.com");
            data.add(row);
        }

        // 3. 導出表格
        excelWriter.write(data, sheet);
        excelWriter.finish();
    }

}

以上代碼中,我們演示了如何使用 EasyExcel 導出大批量數據。在生成大數據量時,我們需要注意減少內存佔用,使用流式寫入方式;並且針對不同需求,可以採用多線程導出的方式,提升導出效率。

四、總結

通過以上的介紹,我們可以看到 EasyExcel 導出在 Java 中是非常好用的一個開源庫。它通過採用註解方式定義 Excel 表格屬性和流式寫入方式,極大地簡化了 Excel 的導出操作,同時支持複雜的格式化與樣式設置,對於多種需求場景也都有高效的解決方案。無論是在線上業務中,還是在數據分析處理中,EasyExcel 都是一個非常值得使用的工具。

原創文章,作者:OMQAD,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/361723.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
OMQAD的頭像OMQAD
上一篇 2025-02-25 18:17
下一篇 2025-02-25 18:17

相關推薦

  • Python應用程序的全面指南

    Python是一種功能強大而簡單易學的編程語言,適用於多種應用場景。本篇文章將從多個方面介紹Python如何應用於開發應用程序。 一、Web應用程序 目前,基於Python的Web…

    編程 2025-04-29
  • Python zscore函數全面解析

    本文將介紹什麼是zscore函數,它在數據分析中的作用以及如何使用Python實現zscore函數,為讀者提供全面的指導。 一、zscore函數的概念 zscore函數是一種用於標…

    編程 2025-04-29
  • 全面解讀數據屬性r/w

    數據屬性r/w是指數據屬性的可讀/可寫性,它在程序設計中扮演著非常重要的角色。下面我們從多個方面對數據屬性r/w進行詳細的闡述。 一、r/w的概念 數據屬性r/w即指數據屬性的可讀…

    編程 2025-04-29
  • Python計算機程序代碼全面介紹

    本文將從多個方面對Python計算機程序代碼進行詳細介紹,包括基礎語法、數據類型、控制語句、函數、模塊及面向對象編程等。 一、基礎語法 Python是一種解釋型、面向對象、動態數據…

    編程 2025-04-29
  • Matlab二值圖像全面解析

    本文將全面介紹Matlab二值圖像的相關知識,包括二值圖像的基本原理、如何對二值圖像進行處理、如何從二值圖像中提取信息等等。通過本文的學習,你將能夠掌握Matlab二值圖像的基本操…

    編程 2025-04-28
  • 瘋狂Python講義的全面掌握與實踐

    本文將從多個方面對瘋狂Python講義進行詳細的闡述,幫助讀者全面了解Python編程,掌握瘋狂Python講義的實現方法。 一、Python基礎語法 Python基礎語法是學習P…

    編程 2025-04-28
  • 全面解析Python中的Variable

    Variable是Python中常見的一個概念,是我們在編程中經常用到的一個變數類型。Python是一門強類型語言,即每個變數都有一個對應的類型,不能無限制地進行類型間轉換。在本篇…

    編程 2025-04-28
  • Zookeeper ACL 用戶 anyone 全面解析

    本文將從以下幾個方面對Zookeeper ACL中的用戶anyone進行全面的解析,並為讀者提供相關的示例代碼。 一、anyone 的作用是什麼? 在Zookeeper中,anyo…

    編程 2025-04-28
  • Python合集符號全面解析

    Python是一門非常流行的編程語言,在其語法中有一些特殊的符號被稱作合集符號,這些符號在Python中起到非常重要的作用。本文將從多個方面對Python合集符號進行詳細闡述,幫助…

    編程 2025-04-28
  • Switchlight的全面解析

    Switchlight是一個高效的輕量級Web框架,為開發者提供了簡單易用的API和豐富的工具,可以快速構建Web應用程序。在本文中,我們將從多個方面闡述Switchlight的特…

    編程 2025-04-28

發表回復

登錄後才能評論