0
点赞
收藏
分享

微信扫一扫

SPRINGBOOT使用POI导入EXCEL

1.pom.xml

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

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
        </dependency>

2.java解析
注意HSSF只能导入2003版本,即后缀xls

public class POIUtils {
    /**
     * Excel 解析成数据集合
     *
     * @return
     */
    public static List<UserVO> addUsers(MultipartFile file) {
        List<UserVO> list = new ArrayList<>();
        UserVO userVO = null;
        try {
            //1. 创建一个 workbook 对象
            InputStream inputStream = file.getInputStream();
            HSSFWorkbook workbook=null;
            //XSSFWorkbook workbook = null;
            try {
                workbook = new HSSFWorkbook(new POIFSFileSystem(inputStream));
                //workbook = new XSSFWorkbook(String.valueOf(new POIFSFileSystem(inputStream)));
                //2. 获取 workbook 中表单的数量
                int numberOfSheets = workbook.getNumberOfSheets();
                for (int i = 0; i < numberOfSheets; i++) {
                    //3. 获取表单
                    HSSFSheet sheet = workbook.getSheetAt(i);
                    //XSSFSheet sheet = workbook.getSheetAt(i);
                    //4. 获取表单中的行数
                    int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
                    System.out.println("rows:"+physicalNumberOfRows);
                    for (int j = 0; j < physicalNumberOfRows; j++) {
                        //5. 跳过标题行
                        if (j == 0) {
                            continue;//跳过标题行
                        }
                        //6. 获取行
                        HSSFRow row = sheet.getRow(j);
                        //XSSFRow row = sheet.getRow(j);
                        if (row == null) {
                            continue;//防止数据中间有空行
                        }
                        //7. 获取列数
                        int physicalNumberOfCells = row.getPhysicalNumberOfCells();
                        userVO = new UserVO();
                        for (int k = 0; k < physicalNumberOfCells; k++) {
                            HSSFCell cell = row.getCell(k);
                            //XSSFCell cell = row.getCell(k);
                            switch (cell.getCellType()) {
                                // 类型是 String 进入此 case 块
                                case STRING:
                                    String cellValue = cell.getStringCellValue();
                                    switch (k) {
                                        case 0:

                                            //啥也不做
                                            //id让数据库自增
                                            break;
                                        case 1:
                                            userVO.setUsername(cellValue);
                                            break;
                                        case 2:

                                            userVO.setPassword(cellValue);
                                            break;
                                        //case 3:
                                        //   userVO.setRole(0);
                                        //    break;
                                    }
                                    break;
                                // 类型是 Date或者数字 进入此 case 块
                                default: {
                                    switch (k) {
                                        case 3:
                                            Double cellV = cell.getNumericCellValue();
                                            userVO.setRole(cellV.intValue());
                                            break;
                                    }
                                }
                            }
                            // 最后将解析后的数据添加到员工集合中
                        }
                        //一行执行一次
                        list.add(userVO);
                    }
                }
                //}
            } catch (IOException e) {
                e.printStackTrace();
            }
            return list;
        }
        catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

}
举报

相关推荐

0 条评论