zoukankan      html  css  js  c++  java
  • 使用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的导入了!

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

  • 相关阅读:
    【题解】NOIP2016换教室
    【题解】平面最近点对(加强版)
    [atcoder002E] Candy Piles [博弈论]
    [AGC002D] Stamp Rally [并查集+整体二分]
    [ACG001E] BBQ hard [dp]
    [BJOI2006][bzoj1001] 狼抓兔子 [最小割]
    [usaco jan 09] 安全路径 travel [最短路径树]
    [usaco jan 09] 气象牛 baric [dp]
    [poj1741] tree [点分治]
    [NOI2009] 植物大战僵尸 [网络流]
  • 原文地址:https://www.cnblogs.com/chenmc/p/9356324.html
Copyright © 2011-2022 走看看