EasyExcel實現(xiàn)讀寫Excel文件的示例代碼
1、EasyExcel介紹
EasyExcel是阿里巴巴開源的一個excel處理框架,以使用簡單、節(jié)省內(nèi)存著稱。EasyExcel能大大減少占用內(nèi)存的主要原因是在解析Excel時沒有將文件數(shù)據(jù)一次性全部加載到內(nèi)存中,而是從磁盤上一行行讀取數(shù)據(jù),逐個解析。
2、EasyExcel特點
Java領(lǐng)域解析、生成Excel比較有名的框架有Apache poi、jxl等。但他們都存在一個嚴重的問題就是非常的耗內(nèi)存。如果你的系統(tǒng)并發(fā)量不大的話可能還行,但是一旦并發(fā)上來后一定會OOM或者JVM頻繁的full gc。
EasyExcel采用一行一行的解析模式,并將一行的解析結(jié)果以觀察者的模式通知處理(AnalysisEventListener)
EasyExcel是一個基于Java的簡單、省內(nèi)存的讀寫Excel的開源項目。在盡可能節(jié)約內(nèi)存的情況下支持讀寫百M的Excel。
3、EasyExcel寫操作
3.1 pom中引入xml相關(guān)依賴
<dependencies> <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.1</version> </dependency> </dependencies>
3.2 創(chuàng)建實體類
設(shè)置表頭和添加的數(shù)據(jù)字段
@Data public class User { //設(shè)置表頭名稱 @ExcelProperty(value = "用戶編號") private int id; //設(shè)置表頭名稱 @ExcelProperty(value = "用戶名稱") private String name; }
3.3 實現(xiàn)寫操作
這里先簡單測試下
public class TestWrite { public static void main(String[] args) { //設(shè)置文件名稱和路徑 String fileName="I:\\temp\\ggkt\\test.xlsx"; //調(diào)用方法 EasyExcel.write(fileName,User.class) .sheet("寫操作") .doWrite(data()); } //循環(huán)設(shè)置要添加的數(shù)據(jù),最終封裝到list集合中 private static List<User> data() { List<User> list = new ArrayList<User>(); for (int i = 0; i < 10; i++) { User data = new User(); data.setId(i); data.setName("lucy"+i); list.add(data); } return list; } }
讀操作沒有任何問題。
4、EasyExcel讀操作
4.1 創(chuàng)建實體類
這里加上index屬性,index=0表示第一列,以此類推
@Data public class User { //設(shè)置表頭名稱 //設(shè)置列對應(yīng)的屬性 @ExcelProperty(value = "用戶編號",index = 0) private int id; //設(shè)置表頭名稱 //設(shè)置列對應(yīng)的屬性 @ExcelProperty(value = "用戶名稱",index = 1) private String name; }
4.2 創(chuàng)建讀取操作的監(jiān)聽器
package com.atguigu.excel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import java.util.Map; public class ExcelListener extends AnalysisEventListener<User> { //一行一行讀取excel內(nèi)容,把每行內(nèi)容封裝到User對象中 //從excel第二行還是讀取(第一行是表頭) @Override public void invoke(User user, AnalysisContext context) { System.out.println(user); } //讀取excel表頭信息 @Override public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) { System.out.println("表頭:"+headMap); } //讀取完成后執(zhí)行 @Override public void doAfterAllAnalysed(AnalysisContext context) { } }
4.3 實現(xiàn)讀操作
import com.alibaba.excel.EasyExcel; public class TestRead { public static void main(String[] args) { //設(shè)置文件名稱和路徑 String fileName="I:\\temp\\ggkt\\test.xlsx"; //調(diào)用方法進行讀操作 EasyExcel.read(fileName,User.class,new ExcelListener()) .sheet() .doRead(); } }
讀excel也沒有什么問題。
到此,excel的讀寫操作就完了,當然這只是在測試類中寫的,我的業(yè)務(wù)是實現(xiàn)課程分類列表的導(dǎo)入和導(dǎo)出功能,就需要完善前后端的是實現(xiàn)了,業(yè)務(wù)代碼就不放出來了,要不就很繁瑣,大致思想跟上面是一樣的。
我的項目中實現(xiàn)效果如下:
點擊按鈕實現(xiàn)excel的導(dǎo)入和導(dǎo)出功能。
以上就是EasyExcel實現(xiàn)讀寫Excel文件的示例代碼的詳細內(nèi)容,更多關(guān)于EasyExcel讀寫Excel的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java簡單實現(xiàn)調(diào)用命令行并獲取執(zhí)行結(jié)果示例
這篇文章主要介紹了Java簡單實現(xiàn)調(diào)用命令行并獲取執(zhí)行結(jié)果,結(jié)合實例形式分析了Java調(diào)用ping命令并獲取執(zhí)行結(jié)果相關(guān)操作技巧,需要的朋友可以參考下2018-08-08springboot整合Mybatis、JPA、Redis的示例代碼
這篇文章主要介紹了springboot整合Mybatis、JPA、Redis的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Maven?項目用Assembly打包可執(zhí)行jar包的方法
這篇文章主要介紹了Maven?項目用Assembly打包可執(zhí)行jar包的方法,該方法只可打包非spring項目的可執(zhí)行jar包,需要的朋友可以參考下2023-03-03SpringBoot中整合MyBatis-Plus的方法示例
這篇文章主要介紹了SpringBoot中整合MyBatis-Plus的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09JAVA HashSet和TreeSet 保證存入元素不會重復(fù)的操作
這篇文章主要介紹了JAVA HashSet和TreeSet 保證存入元素不會重復(fù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09解決Spring?Boot應(yīng)用打包后文件訪問問題
在Spring Boot項目的開發(fā)過程中,一個常見的挑戰(zhàn)是如何有效地訪問和操作資源文件,本文就來介紹一下解決Spring?Boot應(yīng)用打包后文件訪問問題,感興趣的可以了解一下2024-01-01Eclipse中maven異常Updating Maven Project的統(tǒng)一解決方案
今天小編就為大家分享一篇關(guān)于Eclipse中maven異常Updating Maven Project的統(tǒng)一解決方案,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12