有些时候我们只需要获取Excel中的某一列数据使用,我们就可以将这一列数据读取到集合中以便于后续操作。
1、引入依赖
<!-- easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.2.1</version>
</dependency>
2、工具类方法
public class EasyExcelUtil {
/**
* 获取Excel中指定列的数据并返回集合
* @param inputStream 文件流
* @param sheetNo Sheet的编码,使用这个来指定读取哪个Sheet
* @param columnIndex 列的编码,使用这个指定读取那一列的数据
* @param dataType 数据类型
* @param <T>
* @return
*/
public static <T> List<T> readColumnValues(InputStream inputStream, int sheetNo , int columnIndex, Class<T> dataType) {
List<T> columnValues = new ArrayList<>();
EasyExcel.read(inputStream, new AnalysisEventListener<Map<Integer,String>>() {
@Override
public void invoke(Map<Integer,String> data, AnalysisContext context) {
String value = data.get(columnIndex);
if (StringUtil.isNotEmpty(value)){
T convertedValue = convertValue(value, dataType);
columnValues.add(convertedValue);
}
}
@Override
public void onException(Exception exception, AnalysisContext context) throws Exception {
throw new ServiceException("读取Excel异常!");
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
}
}).sheet(sheetNo).doRead();
return columnValues;
}
private static <T> T convertValue(String value, Class<T> dataType) {
if (dataType.equals(String.class)) {
return dataType.cast(value);
} else if (dataType.equals(Integer.class)) {
return dataType.cast(Integer.parseInt(value));
} else if (dataType.equals(Double.class)) {
return dataType.cast(Double.parseDouble(value));
}else {
// 其他数据类型的转换逻辑
return null;
}
}
}
3、使用
// 读取Excel中点位坐标
List<String> coordList = EasyExcelUtil.readColumnValues(file.getInputStream(), 0, 1, String.class);
标签:return,读取,dataType,EasyExcel,value,param,集合,public
From: https://www.cnblogs.com/Snowclod/p/17970017