目录
依赖
<!-- 添加POI的依赖用于Excel的操作 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.0</version>
</dependency>
代码
public Result doRegisterFromExcel(@RequestParam("file") MultipartFile file){
String EXCEL_XLS = "xls";
String EXCEL_XLSX = "xlsx";
if (file.isEmpty())
return ResultGenerator.genFailResult("文件为空");
System.out.println(file.getOriginalFilename());
List<Boolean> registerResult = new ArrayList<>();
try {
//根据路径获取这个操作excel的实例
Sheet sheet = null;
Row row = null;
if (file.getOriginalFilename().endsWith(EXCEL_XLS)) {
//用于xls文件的读取
HSSFWorkbook wb = new HSSFWorkbook(file.getInputStream());
sheet = wb.getSheetAt(0);
} else if (file.getOriginalFilename().endsWith(EXCEL_XLSX)) {
//用于xlsx文件的读取
XSSFWorkbook wb = new XSSFWorkbook(file.getInputStream());
//根据页面index 获取sheet页
sheet = wb.getSheetAt(0);
}
//实体类集合
List<User> users = new ArrayList<>();
//循环sheet页中数据从第三行开始,第一行是导入说明,第二行是标题
for (int i = 2; i < sheet.getPhysicalNumberOfRows(); i++) {
//获取每一行数据
row = sheet.getRow(i);
User user = new User();
//表中第二列,日期
if(row.getCell(1)!=null){
Cell cell = row.getCell(1);
Date d = cell.getDateCellValue();
DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
String guarantee_date = "";
guarantee_date = formater.format(d);
user.setDate(guarantee_date);
}
//String类型的列,这里最好使用如下的方法。如果使用直接获取String的方法,会发生在表格数据为数字的情况下的异常
if(row.getCell(2)!=null){//括号中为列数
Cell cell = row.getCell(2);
cell.setCellType(CellType.STRING);
shljAbnormalGarbage.setChar(cell.getStringCellValue());
}
//数字类型的列
if(row.getCell(3)!=null){
shljAbnormalGarbage.setNumber((int)row.getCell(5).getNumericCellValue());
}
users.add(user);
}
for (User u : users) {
Boolean test = false;
registerResult.add(test = userService.addFormExcel(u.getDate(),u.getChar(), u.getNumber()));
System.out.println(test);
}
} catch (Exception e) {
e.printStackTrace();
}
return ResultGenerator.genSuccessResult(registerResult);
}
注意点
在获取数据某一个单元格的数据时,要注意如下的方面,最好不要直接使用row.getCell(2).getStringCellValue();应该使用如下代码:
//String类型的列,这里最好使用如下的方法。如果使用直接获取String的方法,会发生在表格数据为数字的情况下的异常
if(row.getCell(2)!=null){
Cell cell = row.getCell(2);
cell.setCellType(CellType.STRING);
shljAbnormalGarbage.setChar(cell.getStringCellValue());
}