使用poi读取Excel文件,并将数据封装到java对象中
Maven引入依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.1</version>
</dependency>
</dependencies>
Excel工具类
public class ExcelUtil {
public <T> List<T> importExcel(Class<T> clazz, String cellNameList, MultipartFile file){
InputStream inputStream = null;
Workbook workbook = null;
String filename = file.getOriginalFilename();
List<String> fieldNameList = Arrays.asList(cellNameList.split(","));
List<T> dataList = new ArrayList<>();
try {
inputStream = file.getInputStream();
String suffix = "xlsx";
String drop = ".";
if (suffix.equals(StringUtils.substringAfterLast(filename,drop))){
workbook = new XSSFWorkbook(inputStream);
}else{
workbook = new HSSFWorkbook(inputStream);
}
Sheet sheet = workbook.getSheet("sheet1");
int rowNo = 0;
for (Row row : sheet) {
if (rowNo++ == 0 || StringUtils.isBlank(row.getCell(0).toString())){
continue;
}
T t = clazz.newInstance();
Field[] fields = clazz.getDeclaredFields();
Map<String, Field> map = Arrays.stream(fields).collect(Collectors.toMap(c -> c.getName(), c -> c));
int cellNo = 0;
for (Cell cell : row) {
cell.setCellType(CellType.STRING);
String cellString = cell.toString().trim();
String fieldName = fieldNameList.get(cellNo++);
Field field = map.get(fieldName);
field.setAccessible(true);
Class<?> type = field.getType();
Object convert = ConvertUtils.convert(cellString, type);
field.set(t,convert);
field.setAccessible(false);
}
dataList.add(t);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return dataList;
}
}