1、easyexcel导入,会使用到上一篇的EasyExcelUtil的工具类
List<StockImeiChangeImport> imeiImportList = EasyExcelUtil.readEasyExcelData(file.getInputStream(), StockImeiChangeImport.class,1000);
2、主要用的EasyExcelUtil中的这个方法:
/**
* 读取Excel中文件
* @param inputStream 文件流,用完请自己关闭
* @param clazz 接收类,row到bean的映射类
* @param listSize 最大读取行数,超过listSize的将被丢弃。
*/
public static <T> List<T> readEasyExcelData(InputStream inputStream, Class<T> clazz, int listSize) {
List<T> ret = new ArrayList<>();
//本地读取文件 并验证
SyncReadListener syncReadListener = new SyncReadListener(){
@Override
public void invoke(Object object, AnalysisContext context) {
if (super.getList().size() > listSize) {
//超过listSize行抛弃,节约内存。==》通过异常终止,会导致easyexcel抛出新的异常,不方便捕捉。所以只能通过类似自旋等待结束。
return;
}
//判断是否读取的是空行
boolean addFlag = false;
Class<?> aClass = object.getClass();
try {
for (Field declaredField : aClass.getDeclaredFields()) {
declaredField.setAccessible(true);
Object o = declaredField.get(object);
if (o != null) {
addFlag = true;
//去除前后空格
if (o instanceof String) {
declaredField.set(object, o.toString().trim());
}
}
}
} catch (IllegalAccessException e) {
throw new IllegalArgumentException(e);
}
if (addFlag) {
super.invoke(object, context);
}
}
};
ExcelReaderSheetBuilder sheet = EasyExcel.read(inputStream, clazz,syncReadListener).sheet();
sheet.doRead();
for (Object o : syncReadListener.getList()) {
if (clazz.isInstance(o)) {
ret.add(clazz.cast(o));
}
}
return ret;
}
3、对应的bean
//@ExcelProperty("XXXXXX")注解里填写excel对应的列名
@ExcelProperty("串号编号")
private String ImeiNum;
@ExcelProperty("串号内容")
private String Imei;