¿Cómo puedo determinar las filas vacías en documentos .xls utilizando Apache POI?¿Cómo determinar la fila vacía?
Respuesta
Tiene que recorrer todas las celdas de la fila y verificar si están todas vacías. No sé cualquier otra solución ...
short c;
for (c = lastRow.getFirstCellNum(); c <= lastRow.getLastCellNum(); c++) {
cell = lastRow.getCell(c);
if (cell != null && lastRow.getCell(c).getCellType() != HSSFCell.CELL_TYPE_BLANK) {
nonBlankRowFound = true;
}
}
El código es de here
obtener la instancia de CellReference y utilizar formatAsString() en la instancia. compararla con una cadena vacía
`
if("".equals(cellRef.formatAsString())){
System.out.println("this is an empty cell");
}else{
System.out.println("Cell value : "+cellRef.formatAsString());
}
` Referencia: http://www.javabeat.net/2007/10/apache-poi-reading-excel-sheet-using-java/
Suponiendo que desea comprobar si la fila n
está vacío, recordando que las filas de Apache POI son cero no se basan uno basan , querrías algo como:
Row r = sheet.getRow(n-1); // 2nd row = row 1
boolean hasData = true;
if (r == null) {
// Row has never been used
hasData = false;
} else {
// Check to see if all cells in the row are blank (empty)
hasData = false;
for (Cell c : r) {
if (c.getCellType() != Cell.CELL_TYPE_BLANK) {
hasData = true;
break;
}
}
}
Estoy usando el siguiente método en mi proyecto POI y es Trabajando bien. Es una variación de la solución de zeller.
public static boolean isRowEmpty(Row row) {
for (int c = row.getFirstCellNum(); c < row.getLastCellNum(); c++) {
Cell cell = row.getCell(c);
if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK)
return false;
}
return true;
}
Sí, pero si de alguna fila que tendremos en algunos celular = "" y valores vacíos en otras células. Este método será un trabajo mejor:
boolean isEmptyRow(Row row){
boolean isEmptyRow = true;
for(int cellNum = row.getFirstCellNum(); cellNum < row.getLastCellNum(); cellNum++){
Cell cell = row.getCell(cellNum);
if(cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK && StringUtils.isNotBlank(cell.toString())){
isEmptyRow = false;
}
}
return isEmptyRow;
}
El iterador fila devuelve sólo las filas que contienen datos, sin embargo si están completamente vacía, entonces la iteración por el índice de la fila, getRow(index)
vuelve null
Solución:
Hasta POI versión 3.14 (gracias a Sergii Lisnychyi):
private boolean checkIfRowIsEmpty(Row row) {
if (row == null) {
return true;
}
if (row.getLastCellNum() <= 0) {
return true;
}
for (int cellNum = row.getFirstCellNum(); cellNum < row.getLastCellNum(); cellNum++) {
Cell cell = row.getCell(cellNum);
if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK && StringUtils.isNotBlank(cell.toString())) {
return false;
}
}
return true;
}
Desde la versión PDI 03.15 a 04.02 (int getCellType()
es obsoleto):
private boolean checkIfRowIsEmpty(Row row) {
if (row == null) {
return true;
}
if (row.getLastCellNum() <= 0) {
return true;
}
for (int cellNum = row.getFirstCellNum(); cellNum < row.getLastCellNum(); cellNum++) {
Cell cell = row.getCell(cellNum);
if (cell != null && cell.getCellTypeEnum() != CellType.BLANK && StringUtils.isNotBlank(cell.toString())) {
return false;
}
}
return true;
}
partir de la versión 4 de POI (CellTypeEnum getCellType()
devolverá el Enum no int):
private boolean checkIfRowIsEmpty(Row row) {
if (row == null) {
return true;
}
if (row.getLastCellNum() <= 0) {
return true;
}
for (int cellNum = row.getFirstCellNum(); cellNum < row.getLastCellNum(); cellNum++) {
Cell cell = row.getCell(cellNum);
if (cell != null && cell.getCellType() != CellType.BLANK && StringUtils.isNotBlank(cell.toString())) {
return false;
}
}
return true;
}
intente utilizar si (iterator.hasNext)
Row nextRow = null;
Cell nextCell = null;
Iterator<Row> iterator = firstSheet.rowIterator();
if(iterator.hasNext) {
return true;
}
else {
return false;
}
- 1. Última celda no vacía en la fila; Excel VBA
- 2. Determinar si una cadena está "vacía"
- 3. WPF DataGrid fila vacía en la parte inferior
- 4. ¿Cómo puedo determinar si una matriz está vacía en PHP?
- 5. Determinar si la propiedad del objeto está vacía
- 6. jQuery - Cómo ocultar una fila que contiene una celda vacía
- 7. Cómo eliminar cada fila vacía de cualquier tabla SQL
- 8. ¿Cómo elimino la fila vacía de la parte inferior de un control DataGridView?
- 9. PhpExcel - ¿Cómo insertar la misma fila después de la fila N?
- 10. Selección de una fila vacía adicional que no existe
- 11. ¿Cómo inserto una fila vacía, pero la actualización del autonumber es correcta?
- 12. ¿Cómo inicializar la lista vacía?
- 13. DataGridView: cómo ocultar la fila "nueva"?
- 14. ¿Cómo determinar si una fila de la tabla es visible o no?
- 15. ¿Cómo obtener la fila de identificación de la fila actualizada?
- 16. ¿Cómo determinar si una matriz está vacía o no en matlab?
- 17. Cómo determinar la orientación absoluta
- 18. Agregar fila vacía a los resultados de la consulta si no se encontraron resultados
- 19. ¿Cómo se compila una clase vacía y una estructura vacía?
- 20. MPI_Recv - ¿Cómo determinar el recuento?
- 21. añadir a la lista vacía
- 22. ¿Cuál es la manera más rápida de determinar si existe una fila usando Linq a SQL?
- 23. strcmp para la cadena vacía
- 24. Cómo determinar automáticamente la calidad del texto?
- 25. cómo determinar la base de un número?
- 26. ¿Cómo puedo determinar la velocidad de CodeIgniter?
- 27. Cómo determinar el directorio de la extensión
- 28. Cómo determinar la versión de OpenCV
- 29. Cómo determinar la precisión de Pi (π)
- 30. ¿Cómo determinar la impresora predeterminada usando WPF?
He usado el mismo fragmento de código pero devuelve falso para el valor de celda vacío. Si compruebo si (cell.getStringCellValue! = Null && cell.getNumericValue! = Null) funciona para el valor String, pero para el valor BigDecimal devuelve IllegalStateException: No se puede convertir texto a valor numérico. ¿Puede sugerirme cómo manejar isRowEmpty para que sea verdadero para una fila vacía? – Harleen
¿Y qué pasa si el tipo de celda es de fórmula? –