2017-11-14 2 views
1

Zunächst entschuldige ich mich für mein schlechtes Englisch, es ist nicht meine primäre Sprache. Ich habe ein Problem mit meinem Code beim Lesen einer Excel-Datei (xlsx). Das erste Mal, als ich meinen Code benutzt habe, funktioniert es perfekt, aber jetzt kann ich es nicht benutzen. Der Excel-Inhalt wird auf der Konsole ausgegeben, daneben befindet sich jedoch eine NullPointerException, die durch die mit (- >>>) markierte for-Schleife verursacht wird. Wenn mir jemand helfen kann, wäre ich sehr dankbar, dieser Code hat mir einige Kopfschmerzen bereitet.For Loop NullPointerException mit Apache POI

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

Siehe https://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it (Entschuldigung kann den Link nicht formatieren) – StephaneM

+0

Bitte debugge deinen Code. Es hört sich so an, als ob Ihr 'i' außerhalb der Grenzen für Zeilennummern im Blatt liegt, und es wird durch seltsame Berechnungen von' filasCount' verursacht. Aber der einzige Weg, um sicherzustellen, ist das Debuggen, und wir haben Ihre Daten nicht. –

+0

Muss Datenproblem sein. –

Antwort

1

Ihr Blatt wahrscheinlich Zeilen oder Zellen hat fehlt. Der beste Weg, um über eine Tabelle in poi zu iterieren, ist die for each Syntax wie folgt.

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(); 
    }  

} 

} 

Viele einfache Fragen können, indem man die quick guide auf der poi Webseite beantwortet werden.

+0

Sie geben mir einfach die perfekte Lösung! Vielen Dank für Ihre Hilfe, Grüße – pablomrkite

0

Durch den Code zu sehen, denke ich, dass NullPointerException, wenn die erste Zeile in der Excel-Tabelle auftritt leer ist. Also, ich habe einen Iterator in Reihen erstellt.

den Code unten Versuchen:

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

Ich habe nur eine Frage zu Ihrem Update, in "sheet.rowIterator()" markiert es "Blatt" und der Vorschlag besagt, dass ich eine Klasse namens "Blatt" machen muss. – pablomrkite

+0

Tippfehler, mein Fehler. Überprüfen Sie jetzt –

+0

ES ARBEITET! Vielen Dank für Ihre Hilfe! – pablomrkite