Java实现Excel表格数据的导入(兼容xls与xlsx)

Java实现Excel表格数据的导入(兼容xls与xlsx)

  • 目录
    • 依赖
    • 代码
    • 注意点

目录

依赖

<!-- 添加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 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 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());
                }

你可能感兴趣的:(java)