目錄
一 官方文檔介紹
二 讀取文件內(nèi)容
1.根據(jù)文檔內(nèi)容建立讀對象
2.創(chuàng)建讀監(jiān)聽器
3.測試類代碼
一 官方文檔介紹
Java解析、生成Excel比較有名的框架有Apache poi、jxl。但他們都存在一個嚴重的問題就是非常的耗內(nèi)存,poi有一套SAX模式的API可以一定程度的解決一些內(nèi)存溢出的問題,但POI還是有一些缺陷,比如07版Excel解壓縮以及解壓后存儲都是在內(nèi)存中完成的,內(nèi)存消耗依然很大。
easyexcel重寫了poi對07版Excel的解析,一個3M的excel用POI sax解析依然需要100M左右內(nèi)存,改用easyexcel可以降低到幾M,并且再大的excel也不會出現(xiàn)內(nèi)存溢出;03版依賴POI的sax模式,在上層做了模型轉換的封裝,讓使用者更加簡單方便。
二 讀取文件內(nèi)容
自定義文件如圖所示:
1.根據(jù)文檔內(nèi)容建立讀對象
@Setter
@Getter
@EqualsAndHashCode
@ToString
public class ExcelData {
@ExcelProperty(value ="班級" )
private String classNumber;
@ExcelProperty(value ="姓名" )
private String name;
}
2.創(chuàng)建讀監(jiān)聽器
package read.test;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Slf4j
public class DataListener implements ReadListener<ExcelData> {
private static final int BATCH_SIZE=10;
private List<ExcelData> dataList= new ArrayList<>();
@Override
public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
ReadListener.super.invokeHead(headMap, context);
System.out.println("解析到一條頭數(shù)據(jù)");
System.out.println(JSON.toJSONString(headMap.get(0)));
}
@Override
public void invoke(ExcelData excelData, AnalysisContext analysisContext) {
dataList.add(excelData);
if (dataList.size()>=BATCH_SIZE){
saveData();
dataList.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
saveData();
System.out.println("解析完畢");
}
public void saveData(){
System.out.println("正在讀取"+dataList.size()+"條數(shù)據(jù)");
System.out.println("**********************************************");
dataList.forEach(l->{
System.out.println(l.toString());
});
System.out.println("**********************************************");
}
}
3.測試類代碼
package read.test;
import com.alibaba.excel.EasyExcel;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
@Slf4j
public class TestDemo {
@Test
public void test_read() throws InterruptedException {
String filename="C:\\Users\\13404\\Desktop\\桌面附件\\test.xlsx";
System.out.println("Excel內(nèi)容如下:");
EasyExcel.read(filename,ExcelData.class,new DataListener()).sheet(0).doRead();
}
}
結果:
文章來源:http://www.zghlxwxcb.cn/news/detail-631498.html
最后給出官方文檔的鏈接,感興趣的同學自行了解。關于Easyexcel | Easy Excel (alibaba.com)?文章來源地址http://www.zghlxwxcb.cn/news/detail-631498.html
到了這里,關于EasyExcel讀取EXcel文件內(nèi)容的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!