En primer lugar, me disculpo por mi mal inglés, no es mi idioma principal. Tengo un problema con mi código cuando está leyendo un archivo de Excel (xlsx). La primera vez que usé mi código, funcionó perfectamente, pero ahora no puedo usarlo. El contenido de Excel se imprime en la consola, pero junto a él hay una NullPointerException causada por el bucle for marcado con (- >>>). Si alguien me puede ayudar, estaría muy agradecido, este código me ha dado varios dolores de cabeza.

package modleerjava;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class leerExcel {
public void readExcel(String rutaFile,String nombreFile, String sheetName ) 
 throws IOException {
    File file = new File ("C:/Users/Pablo/Desktop/prueba.xlsx"); 
    FileInputStream inputStream = new FileInputStream(file);  
    XSSFWorkbook excelWorkbook ; 
    excelWorkbook = new XSSFWorkbook(inputStream);
    Sheet excelSheet = excelWorkbook.getSheet(sheetName); 
    int filasCount = excelSheet.getLastRowNum()-excelSheet.getFirstRowNum(); 

    for (int i=0; i< filasCount+1 ; i++) { 
        Row filas;
        filas = excelSheet.getRow(i);

 -->>>  for (int j=0 ; j < filas.getLastCellNum(); j++) { 
            System.out.print(filas.getCell(j).getStringCellValue()+"|| ");
        }
        System.out.println();
    }       

}

}
1
pablomrkite 14 nov. 2017 a las 15:42

2 respuestas

La mejor respuesta

Es probable que a su hoja le falten filas o celdas. La mejor manera de iterar sobre una hoja de cálculo en poi es usando la sintaxis for each como esta.

package modleerjava;
import java.io.File;
import java.io.IOException;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

public class leerExcel {
public void readExcel(String rutaFile,String nombreFile, String sheetName ) 
    throws IOException {
    Workbook wb = WorkbookFactory.create(new File("C:/Users/Pablo/Desktop/prueba.xlsx"));
    Sheet excelSheet = wb.getSheet(sheetName); 

    for (Row filas: excelSheet) { 
        for (Cell cell: filas) {                
            System.out.print(cell.getStringCellValue()+"|| ");
        }
        System.out.println();
    }       

}

}

Se pueden responder muchas preguntas sencillas consultando la guía rápida en la sitio web de poi.

1
jmarkmurphy 14 nov. 2017 a las 14:14

Al ver el código, creo que NullPointerException aparecerá si la primera fila de la hoja de Excel está en blanco. Entonces, he creado un iterador en filas.

Prueba el siguiente código:

package modleerjava;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class leerExcel {
public void readExcel(String rutaFile,String nombreFile, String sheetName ) 
 throws IOException {
    File file = new File ("C:/Users/Pablo/Desktop/prueba.xlsx"); 
    FileInputStream inputStream = new FileInputStream(file);  
    XSSFWorkbook excelWorkbook ; 
    excelWorkbook = new XSSFWorkbook(inputStream);
    inputStream.close();
    Sheet excelSheet = excelWorkbook.getSheet(sheetName); 
    //int filasCount = excelSheet.getLastRowNum()-excelSheet.getFirstRowNum(); 
    Iterator<Row> row = excelSheet.rowIterator();
    while(row.hasNext()) { 
        Row filas;
        filas = row.next();

        for (int j=0 ; j < filas.getLastCellNum(); j++) { 
            System.out.print(filas.getCell(j).getStringCellValue()+"|| ");
        }
        System.out.println();
    }       

}

 }
0
Arpit Agarwal 14 nov. 2017 a las 14:09