我正在阅读一个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;
}
答案 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的解决方案。