1.pom.xml
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</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-collections4</artifactId>
</dependency>
2.java解析
注意HSSF只能导入2003版本,即后缀xls
public class POIUtils {
/**
* Excel 解析成数据集合
*
* @return
*/
public static List<UserVO> addUsers(MultipartFile file) {
List<UserVO> list = new ArrayList<>();
UserVO userVO = null;
try {
//1. 创建一个 workbook 对象
InputStream inputStream = file.getInputStream();
HSSFWorkbook workbook=null;
//XSSFWorkbook workbook = null;
try {
workbook = new HSSFWorkbook(new POIFSFileSystem(inputStream));
//workbook = new XSSFWorkbook(String.valueOf(new POIFSFileSystem(inputStream)));
//2. 获取 workbook 中表单的数量
int numberOfSheets = workbook.getNumberOfSheets();
for (int i = 0; i < numberOfSheets; i++) {
//3. 获取表单
HSSFSheet sheet = workbook.getSheetAt(i);
//XSSFSheet sheet = workbook.getSheetAt(i);
//4. 获取表单中的行数
int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
System.out.println("rows:"+physicalNumberOfRows);
for (int j = 0; j < physicalNumberOfRows; j++) {
//5. 跳过标题行
if (j == 0) {
continue;//跳过标题行
}
//6. 获取行
HSSFRow row = sheet.getRow(j);
//XSSFRow row = sheet.getRow(j);
if (row == null) {
continue;//防止数据中间有空行
}
//7. 获取列数
int physicalNumberOfCells = row.getPhysicalNumberOfCells();
userVO = new UserVO();
for (int k = 0; k < physicalNumberOfCells; k++) {
HSSFCell cell = row.getCell(k);
//XSSFCell cell = row.getCell(k);
switch (cell.getCellType()) {
// 类型是 String 进入此 case 块
case STRING:
String cellValue = cell.getStringCellValue();
switch (k) {
case 0:
//啥也不做
//id让数据库自增
break;
case 1:
userVO.setUsername(cellValue);
break;
case 2:
userVO.setPassword(cellValue);
break;
//case 3:
// userVO.setRole(0);
// break;
}
break;
// 类型是 Date或者数字 进入此 case 块
default: {
switch (k) {
case 3:
Double cellV = cell.getNumericCellValue();
userVO.setRole(cellV.intValue());
break;
}
}
}
// 最后将解析后的数据添加到员工集合中
}
//一行执行一次
list.add(userVO);
}
}
//}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
catch (Exception e){
e.printStackTrace();
}
return null;
}
}