pom:
com.alibaba easyexcel3.0.5
ExcelTestListener:
package com.sdkj.exceltest.listener.excel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.sdkj.exceltest.entity.ExcelTest; import com.sdkj.exceltest.service.ExcelTestService; import java.util.ArrayList; import java.util.List; public class ExcelTestListener extends AnalysisEventListener{ List list = new ArrayList<>(); private ExcelTestService excelTestService; public ExcelTestListener() { } public ExcelTestListener(ExcelTestService excelTestService) { this.excelTestService = excelTestService; } @Override public void invoke(ExcelTest excelTest, AnalysisContext context) { list.add(excelTest); // 可以设置超过500条了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM if (list.size() >= 1000) { saveData(); // 存储完成清理 list list.clear(); } } @Override public void doAfterAllAnalysed(AnalysisContext context) { saveData(); } private void saveData() { //excelTestService.batchAdd(list); } }
ExcelTest:
package com.sdkj.exceltest.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class ExcelTest implements Serializable {
@ExcelProperty("ID")
private String id;
@ExcelProperty("JGMC")
private String jgmc;
@ExcelProperty("GMC")
private String gmc;
}
test:
@Autowired
private ExcelTestService excelTestService;
@Test
void contextLoads() {
}
@Test
public void test() {
String fileName = "D://test001.xlsx";
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
long start, end;
start = System.currentTimeMillis();
EasyExcel.read(fileName, ExcelTest.class, new ExcelTestListener(excelTestService)).sheet().doRead();
end = System.currentTimeMillis();
System.out.println("start time:" + start + "; end time:" + end + "; Run Time:" + (end - start) + "(ms)");
}



