una leer importar fuera desde datos como archivo java excel apache-poi poi-hssf

importar - leer excel desde java como si fuera una base de datos



¿Cómo obtener el recuento de filas en un archivo Excel usando la biblioteca POI? (4)

Chicos, actualmente estoy usando la biblioteca POI 3.9 para trabajar con archivos de Excel. Conozco la función getLastRowNum() , que devuelve varias filas en un archivo de Excel.

El único problema es getLastRowNum() devuelve un número con el conteo comenzando desde 0.

Entonces, si un archivo de Excel usa las primeras 3 filas, getLastRowNum() devuelve 2. Si un archivo de Excel tiene solo 1 fila, getLastRowNum() devuelve 0.

El problema ocurre cuando el archivo de Excel está completamente vacío. getLastRowNum() aún devuelve 0, por lo que no puedo determinar si el archivo de Excel tiene 1 fila de datos o si está vacía.

Entonces, ¿cómo puedo detectar si un archivo de Excel está vacío o no?


Dado que Sheet.getPhysicalNumberOfRows() no cuenta las filas vacías y Sheet.getLastRowNum() devuelve 0 tanto si hay una fila como ninguna, utilizo una combinación de los dos métodos para calcular con precisión el número total de filas.

int rowTotal = sheet.getLastRowNum(); if ((rowTotal > 0) || (sheet.getPhysicalNumberOfRows() > 0)) { rowTotal++; }

Nota: Esto tratará una hoja de cálculo con una fila vacía como si no tuviera ninguna, pero para la mayoría de los propósitos, esto probablemente sea correcto.


Hay dos cosas que puedes hacer

utilizar

int noOfColumns = sh.getRow(0).getPhysicalNumberOfCells();

o

int noOfColumns = sh.getRow(0).getLastCellNum();

Hay una gran diferencia entre ellos

  1. La opción 1 da el no de columnas que en realidad están llenas de contenido (si la segunda columna de 10 columnas no está llena, obtendrá 9)

  2. La opción 2 simplemente te da el índice de la última columna. De ahí hecho ''getLastCellNum()''



Si haces un cheque

if (getLastRowNum()<1){ res="Sheet Cannot be empty"; return }

Esto asegurará que tenga al menos una fila con datos, excepto el encabezado. A continuación está mi programa que funciona bien. El archivo de Excel tiene tres columnas, es decir. ID, NAME, LASTNAME

XSSFWorkbook workbook = new XSSFWorkbook(inputstream); XSSFSheet sheet = workbook.getSheetAt(0); Row header = sheet.getRow(0); int n = header.getLastCellNum(); String header1 = header.getCell(0).getStringCellValue(); String header2 = header.getCell(1).getStringCellValue(); String header3 = header.getCell(2).getStringCellValue(); if (header1.equals("ID") && header2.equals("NAME") && header3.equals("LASTNAME")) { if(sheet.getLastRowNum()<1){ System.out.println("Sheet empty"); return; } iterate over sheet to get cell values }else{ SOP("invalid format"); return; }