用EasyExcel實現對excel的寫和讀操作


1.概念理解

EasyExcel是阿里巴巴提供的一個針對excel的一個簡單高效的框架,它可以用最簡潔的代碼,最高效地實現對excel的讀和寫操作。

2、EasyExcel特點

  • Java領域解析、生成Excel比較有名的框架有Apache poi、jxl等。但他們都存在一個嚴重的問題就是非常的耗內存。如果你的系統並發量不大的話可能還行,但是一旦並發上來后一定會OOM或者JVM頻繁的full gc。
  • EasyExcel是阿里巴巴開源的一個excel處理框架以使用簡單、節省內存著稱。EasyExcel能大大減少占用內存的主要原因是在解析Excel時沒有將文件數據一次性全部加載到內存中,而是從磁盤上一行行讀取數據,逐個解析。
  • EasyExcel采用一行一行的解析模式,並將一行的解析結果以觀察者的模式通知處理(AnalysisEventListener)。

3.使用EasyExcel需要引入的依賴

<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

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

在IDEA中安裝lombok插件,並引入依賴,Lombok能以簡單的注解形式來簡化java代碼,提高開發人員的開發效率。

  • 在該演示中,我只用到了@Data這個注解,它幫我們自動生成了屬性的getter、setter方法
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.20</version>
    <scope>provided</scope>
</dependency>

4.使用EasyExcel進行寫操作

第一步:創建實體類,和excel中數據對應

@Data
public class DemoData {

    //設置excel表頭名稱和屬性
    @ExcelProperty("學生編號")
    private Integer sno;
    @ExcelProperty("學生姓名")
    private String sname;
}

第二步:測試

public class TestEasyExcel {
    public static void main(String[] args) {
        /*實現excel寫操作*/
        //1.設置寫入文件夾地址和excel文件名稱
        String filename = "E:\\student.xlsx";					//要寫入的文件位置
        //2.調用easyexcel里面的方法實現寫操作
        //write方法兩個參數:第一個參數為文件路徑名稱,第二個參數實體類class
        EasyExcel.write(filename, DemoData.class).sheet("學生列表").doWrite(getData());

    }

    //將創建的多個對象添加到列表中
    private static List<DemoData> getData(){
        List<DemoData> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            DemoData data = new DemoData();
            data.setSno(i);
            data.setSname("至尊寶" + i);
            list.add(data);
        }
        return list;
    }
}

第三步:查看結果

5.使用EasyExcel進行讀操作

讀操作與寫操作稍有不同,需創建一個監聽類,下面將上面寫出的文件E:\student.xlsx進行讀取。

第一步:創建和excel對應的實體類,標記對應的列關系

@Data
public class DemoData {
    //設置excel表頭名稱,設置列的索引,從0開始
    @ExcelProperty(value = "學生編號",index = 0)
    private Integer sno;

    @ExcelProperty(value = "學生姓名",index = 1)
    private String sname;
}

第二步:創建監聽進行excel文件讀取【核心】

  • 讀取一行,解析一行
  • 需繼承AnalysisEventListener類
public class ExcelListener extends AnalysisEventListener<DemoData> {

    //一行一行讀取excel內容,從第二行(除表頭)開始讀
    @Override
    public void invoke(DemoData data, AnalysisContext analysisContext) {
        System.out.println("每一行" + data);
    }

    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("表頭:" + headMap);
    }

    //讀取完之后執行
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }
}

第三步:測試

public class TestEasyExcelRead {
    public static void main(String[] args) {
        //實現excel讀操作
        String s = "E:\\student.xlsx";
        EasyExcel.read(s,DemoData.class,new ExcelListener()).sheet().doRead();
    }
}

第四步:控制台結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM