2012-04-01 10 views
6

Estoy utilizando Apache POI java y quiero obtener el número total de filas que no están vacías. Procesé con éxito una fila completa con todas sus columnas. Ahora supongo que obtengo una hoja de Excel con varias filas y no una sola fila ... ¿cómo hacerlo? Estaba pensando en obtener el número total de filas (int n) y luego repetir hasta i < = n pero no estoy seguro.Apache Número de filas de puntos de interés

sugerencias son bienvenidos :)

Nota: la versión de Apache POI es de 3.8. No estoy tratando con el formato Xlsx ... solo xls.

Sí yo probamos este código, pero tiene 20 a cambio .... que no es posible dado que he sólo 5 filas

FileInputStream fileInputStream = new FileInputStream("COD.xls"); 
      HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream); 
      HSSFSheet worksheet = workbook.getSheet("COD"); 
      HSSFRow row1 = worksheet.getRow(3); 
      Iterator rows = worksheet.rowIterator(); 
      int noOfRows = 0; 
      while(rows.hasNext()) { 
       HSSFRow row = (HSSFRow) rows.next(); 
       noOfRows++;     
      } 
      System.out.println("Number of Rows: " + noOfRows); 
+1

¿Qué has probado exactamente y qué no funciona? ¿Puedes proporcionar algún código? – nansen

+1

No es agradable, pero creo que así es como se hace. Puede usar HSSFSheet directamente en un bucle foreach ya que implementa Iterable . No lo llaman Horrible Spread Sheet Format (HSSF) para nada :(Tal vez obtenga 20 en lugar de las 5 filas esperadas porque tiene filas con valores nulos. También tendría que iterar sobre las celdas y omitir todas las filas con valores nulos solamente – nansen

+0

Creo que lo resolví ... porque tengo menús desplegables en hoja de Excel así que en algún lugar de la hoja esas listas existían. Ahora está funcionando y mostrando los números de la fila derecha –

Respuesta

6
for (int i = 0; i <= sheet.getLastRowNum(); i++) { 
    if ((tempRow = sheet.getRow(i)) != null) { 
      //Your Code Here 
    } 
} 
+0

qué es tempRow aquí. – DEADEND

+0

Es solo una variable. Puedes omitirlo. – Sorter

5

El problema es que la PDI considera filas vacías como filas físicas. Esto sucede a veces en Excel y, aunque no son visibles a la vista, las filas ciertamente existen.

Si tuviera que abrir su hoja de Excel y seleccionar todo debajo de sus datos, luego eliminarla (sé que está vacía, pero hágalo de todos modos), POI devolverá el número correcto.

0

Es posible que desee obtenerPhysicalNumberOfRows() que no sea getLastRowNum()?

0

Puede iterar sobre las filas que no están vacías usando esto:

Iterator<Row> rowIterator = sheet.rowIterator(); 
     while (rowIterator.hasNext()) { 
     Row row = (Row) rowIterator.next(); 
     // Your code here 
     } 

Gracias

0
worksheet.getLastRownNum() // *base index 0* 

Este método le dará el número de la última fila en la que podría tener llenar la fila, incluso si ha rellenado 5 filas, puede haber casos en los que haya llenado algunos espacios en las 15 filas restantes o en la fila 21 porque le está dando el último número de fila como 20.

Puede haber casos en que cada 5ª fila ingrese datos (comenzando desde 1), luego su 5ta entrada estará en la 21ra fila, así que de nuevo, si usa este método, obtendrá 20 en el resultado.

Cuestiones relacionadas