1. 程式人生 > >使用poi進行excel導入並解析插入數據庫

使用poi進行excel導入並解析插入數據庫

第一個 get() att pri app tid 對象 dateutil 新的

前言

最近還得寫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的導入了!

需要註意的是:這裏必須根據模板來進行數據的取出並分別賦值給不同的屬性。

使用poi進行excel導入並解析插入數據庫