我想导入excel,这个excel里所有的字段都是一个对象的,想请问一下用easyexcel怎么能把它读成一个对象
//UserExcelModel.java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserExcelModel {
@ExcelProperty("用户名")
private String userName;
@ExcelProperty("显示名")
private String showName;
}
//导入代码
try{
AnalysisEventListener<UserExcelModel> listener =
EasyExcelUtils.getListener(this::addUsers, 10000);
EasyExcelFactory.read(new BufferedInputStream(inputStream), UserExcelModel.class,listener).sheet().doRead();
return true;
}
catch (Exception e){
log.error("用户导入发生异常", e);
return false;
}
finally {
if(inputStream != null){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//EasyExcelUtils.java
public class EasyExcelUtils {
public static <T> AnalysisEventListener<T> getListener(Consumer<List<T>> consumer,int threshold){
return new AnalysisEventListener<T>() {
/**
* 存储数据集合
*/
private List<T> list = new LinkedList<T>();
/**
* 这个每一条数据解析都会调用一次
* @param t
* @param analysisContext
*/
@Override
public void invoke(T t, AnalysisContext analysisContext) {
//EasyExcel逐行读取并解析
list.add(t);
if (list.size() == threshold){
//已解析数据行数超过threshold,先处理并清空存储数据集合,以免数据量过大造成内存溢出
consumer.accept(list);
list.clear();
}
}
/**
* 所有数据解析完成 自动调用此方法
* @param analysisContext
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
if (list.size()>0){
consumer.accept(list);
}
}
};
}
}