使用poi进行excel导入并解析插入数据库

前言

最近还得写excel的导入导出,结果还是得百度,虽然都能看懂,但是还是想记录下来这些东西


正文

1. 导入jar包

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>

2. 开始导入

   @RequestMapping(value = "importUsers",method = RequestMethod.POST)
public Map<String,Object> importUsers(MultipartFile userFile){
Map<String,Object> resultMap = new HashMap<>();
if(userFile == null || userFile.isEmpty()){
resultMap.put("success", false);
resultMap.put("msg", "数据文件不存在");
return resultMap;
}
    //开启新的线程来处理导入,并使用callback接受结果
FutureTask<Map<String,Object>> task = new FutureTask<>(
()->userService.importUsers(userFile)
);
new Thread(task).start();
try {
resultMap = task.get();
} catch (Exception e) {
e.printStackTrace();
}
return resultMap;
}

3. 业务层

@Override
public Map<String, Object> importUsers(MultipartFile userFile) {
Map<String,Object> resultMap = new HashMap<>();
try {
//获取文件的输入流
InputStream inputStream = userFile.getInputStream();
//根据不同类型excel创建book页。
String fileName = userFile.getOriginalFilename();
Workbook book = null;
if(fileName.endsWith(XLSX)){
book = new XSSFWorkbook(inputStream);
}else if(fileName.endsWith(XLS)){
book = new HSSFWorkbook(inputStream);
}else{
resultMap.put("success", false);
resultMap.put("msg", "文件格式有误!");
return resultMap;
}
if(book != null){
//第一个工作簿
Sheet sheet = book.getSheetAt(0);
//将结果转换成集合
List<User> users = convert(sheet);
for (User u : users) {
userMapper.insert(u);
}
System.out.println(users);
}
resultMap.put("success", true);
resultMap.put("msg", "上传成功!");
return resultMap;
} catch (IOException e) {
e.printStackTrace();
}
return resultMap;
}
/**
 *  将每行数据封装成一个对象
 */
private List<User> convert(Sheet sheet){
List<User> userList = new ArrayList<>();
for (int i = 2; i <= sheet.getLastRowNum() ; i++) {
//第一行,第二行跳过,是记录名和字段名,从第三行开始
Row row = sheet.getRow(i);
User user = new User();
Iterator<Cell> iterator = row.cellIterator();
while (iterator.hasNext()){
Cell cell = iterator.next();
if(cell.getColumnIndex() == 1){
//第二列,类型设置为string,然后赋值给name
cell.setCellType(CellType.STRING);
user.setPhone(cell.getStringCellValue());
}
if(cell.getColumnIndex() == 3){
//第三列,时间格式
if(DateUtil.isCellDateFormatted(cell)){
Date date = cell.getDateCellValue();
user.setCreateDate(date);
}
}
if(cell.getColumnIndex() == 2){
//第二列,类型设置为string,然后赋值给name
cell.setCellType(CellType.STRING);
user.setPassword(cell.getStringCellValue());
}
}
userList.add(user);
}
return userList;
}
 

到现在为止,已经实现了excel的导入了!

需要注意的是:这里必须根据模板来进行数据的取出并分别赋值给不同的属性。

上一篇:windows 下安装nodejs 要怎么设置环境变量


下一篇:ARC 工作原理