新聞中心
這篇文章主要介紹“使用EasyExcel操作Excel有多方便”,在日常操作中,相信很多人在使用EasyExcel操作Excel有多方便問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”使用EasyExcel操作Excel有多方便”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
10年積累的網(wǎng)站設(shè)計、做網(wǎng)站經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先做網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有康保免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
一丶Excel導(dǎo)入導(dǎo)出的應(yīng)用場景
數(shù)據(jù)導(dǎo)入:減輕錄入工作量
數(shù)據(jù)導(dǎo)出:統(tǒng)計信息歸檔
數(shù)據(jù)傳輸: 異構(gòu)系統(tǒng)之間數(shù)據(jù)傳輸
二丶EasyExcel簡介
Java領(lǐng)域解析、生成Excel比較有名的框架有Apache Poi 、jxl等。但他們都存在一個嚴重的問題就是非常的耗內(nèi)存。如果你的系統(tǒng)并發(fā)量不大的話可能還行,但是一旦并發(fā)上來后會oom或者jvm頻繁的fullgc。
EasyExcel是阿里巴巴開源的一個excel處理框架,以使用簡單、節(jié)省內(nèi)存著稱。EasyEacel能大大減少占用內(nèi)存的主要原因是在解析Excel時沒有將文件數(shù)據(jù)一次性全部加載到內(nèi)存中,而是從磁盤上一行行讀取數(shù)據(jù),逐個解析。
EasyExcel采用一行一行的解析模式,并將一行的解析結(jié)果以觀察者的模式通知處理(AnakysisEventListener)。
三、實現(xiàn)EasyExcel對Excel讀操作
1.創(chuàng)建實體類
import com.alibaba.excel.annotation.ExcelProperty; public class ReadData { //設(shè)置列對應(yīng)的屬性 @ExcelProperty(index = 0) private int sid; //設(shè)置列對應(yīng)的屬性 @ExcelProperty(index = 1) private String sname; public int getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } @Override public String toString() { return "ReadData{" + "sid=" + sid + ", sname='" + sname + '\'' + '}'; } }
2、創(chuàng)建讀取操作的監(jiān)聽器
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.exception.ExcelDataConvertException; import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer; import java.util.ArrayList; import java.util.List; import java.util.Map; //創(chuàng)建讀取excel監(jiān)聽器 public class ExcelListener extends AnalysisEventListener{ //創(chuàng)建list集合封裝最終的數(shù)據(jù) List list = new ArrayList (); //一行一行去讀取excle內(nèi)容 @Override public void invoke(ReadData user, AnalysisContext analysisContext) { System.out.println("***"+user); list.add(user); } //讀取excel表頭信息 @Override public void invokeHeadMap(Map headMap, AnalysisContext context) { System.out.println("表頭信息:"+headMap); } //讀取完成后執(zhí)行 @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { } }
3、調(diào)用實現(xiàn)最終的讀取
public static void main(String[] args) throws Exception { // 寫法1: String fileName = "F:\\01.xlsx"; // 這里 需要指定讀用哪個class去讀,然后讀取第一個sheet 文件流會自動關(guān)閉 EasyExcel.read(fileName, ReadData.class, new ExcelListener()).sheet().doRead(); // 寫法2: InputStream in = new BufferedInputStream(new FileInputStream("F:\\01.xlsx")); ExcelReader excelReader = EasyExcel.read(in, ReadData.class, new ExcelListener()).build(); ReadSheet readSheet = EasyExcel.readSheet(0).build(); excelReader.read(readSheet); // 這里千萬別忘記關(guān)閉,讀的時候會創(chuàng)建臨時文件,到時磁盤會崩的 excelReader.finish(); }
四、實現(xiàn)EasyExcel對Excel寫操作
1.創(chuàng)建實體類,設(shè)置表頭和添加的數(shù)據(jù)字段
//設(shè)置表頭和添加的數(shù)據(jù)字段 public class DemoData { //設(shè)置表頭名稱 @ExcelProperty("學(xué)生編號") private int sno; //設(shè)置表頭名稱 @ExcelProperty("學(xué)生姓名") private String sname; public int getSno() { return sno; } public void setSno(int sno) { this.sno = sno; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } @Override public String toString() { return "DemoData{" + "sno=" + sno + ", sname='" + sname + '\'' + '}'; } }
2.創(chuàng)建方法循環(huán)設(shè)置要添加到Excel的數(shù)據(jù)
//循環(huán)設(shè)置要添加的數(shù)據(jù),最終封裝到list集合中 private static Listdata() { List 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; }
3.實現(xiàn)最終的添加操作(寫法一)
public static void main(String[] args) throws Exception { // 寫法1 String fileName = "F:\\11.xlsx"; // 這里 需要指定寫用哪個class去寫,然后寫到第一個sheet,名字為模板 然后文件流會自動關(guān)閉 // 如果這里想使用03 則 傳入excelType參數(shù)即可 EasyExcel.write(fileName, DemoData.class).sheet("寫入方法一").doWrite(data()); }
(寫法二)
public static void main(String[] args) throws Exception { // 寫法2,方法二需要手動關(guān)閉流 String fileName = "F:\\112.xlsx"; // 這里 需要指定寫用哪個class去寫 ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build(); WriteSheet writeSheet = EasyExcel.writerSheet("寫入方法二").build(); excelWriter.write(data(), writeSheet); /// 千萬別忘記finish 會幫忙關(guān)閉流 excelWriter.finish(); }
到此,關(guān)于“使用EasyExcel操作Excel有多方便”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網(wǎng)頁名稱:使用EasyExcel操作Excel有多方便
分享網(wǎng)址:http://ef60e0e.cn/article/gsjise.html