如何使用poi

时间:2015-10-19 10:47:14

标签: java apache-poi

我正在阅读一个excel文件。如果有任何类似的话,我想得到空单元格的行号和列数:

A      B     C      D         E

Jen  John  Alex 03-11-95  {BLANK}

这里我想要空白单元格的行和列索引,我尝试了很多东西但是没有成功

                List<Student> listStudent = new ArrayList<>();
                FileInputStream inputStream = new FileInputStream(file);

                Workbook workbook = new XSSFWorkbook(inputStream);
                Sheet firstSheet = workbook.getSheetAt(0);
                Iterator<Row> iterator = firstSheet.iterator();

                while (iterator.hasNext()) {
                    Row nextRow = iterator.next();
                    Iterator<Cell> cellIterator = nextRow.cellIterator();
                    Student student = new Student();

                    while (cellIterator.hasNext()) {
                        Cell nextCell = cellIterator.next();
                        int columnIndex = nextCell.getColumnIndex();             

                        if (!firstName.contains("not_in_file") && columnIndex == Integer.parseInt(firstName)) {
                            student.setFirstName((String) getCellValue(nextCell));
                        } else if (!familyName.contains("not_in_file") && columnIndex == Integer.parseInt(familyName)) {
                            student.setFamilyName((String) getCellValue(nextCell));
                        } else if (!preferName.contains("not_in_file") && columnIndex == Integer.parseInt(preferName)) {
                            student.setPreferName((String) getCellValue(nextCell));
                        } else if (!dob.contains("not_in_file") && columnIndex == Integer.parseInt(dob)) {
                            student.setDob((String) getCellValue(nextCell));
                        } else if (!guardianName.contains("not_in_file") && columnIndex == Integer.parseInt(guardianName)) {
                            student.setGuardianName((String) getCellValue(nextCell));
                        }

                    }
                    listStudent.add(student);
                }
                System.out.println(" listStudent : " + listStudent);
                workbook.close();
                inputStream.close();



private Object getCellValue(Cell cell) {
        switch (cell.getCellType()) {
        case Cell.CELL_TYPE_STRING:
            return cell.getStringCellValue();

        case Cell.CELL_TYPE_BOOLEAN:
            return cell.getBooleanCellValue();

        case Cell.CELL_TYPE_NUMERIC:
            return cell.getNumericCellValue();
        }

        return null;
    }

2 个答案:

答案 0 :(得分:0)

有一个Cell-constant。您可以将Cell.CELL_TYPE_BLANK案例添加到getCellValue方法。

private Object getCellValue(Cell cell) {
    switch (cell.getCellType()) {
    case Cell.CELL_TYPE_BLANK:
        return "";
    case Cell.CELL_TYPE_STRING:
        return cell.getStringCellValue();

    case Cell.CELL_TYPE_BOOLEAN:
        return cell.getBooleanCellValue();
    case Cell.CELL_TYPE_NUMERIC:
        return cell.getNumericCellValue();

    }

    return null;
}

答案 1 :(得分:0)

Gagravarr所说的很简单,空白或从不使用

空单元格表示初始化单元格,没有值,空单元格将为您提供空值。

虽然从未使用过单元格表示未初始化会给你 null ,因此可能会抛出异常。你需要了解其中的差异。

尝试使用

等条件进行调试
if(cell!=null)
    System.out.println(cell.getStringCellValue());

如果这不是抛出空指针的意思,那么您尝试使用的单元实际上从未使用过,所以null。

但是对于细胞类型的安全性,你也应该使用Christian的解决方案。