2017-11-14 4 views
1

まず第一に、私は私の悪い英語のために謝罪します、それは私の主要な言語ではありません。 Excelファイル(xlsx)を読み込んでいるときにコードに問題があります。初めて私のコードを使用したときは完全に動作しますが、今は使用できません。 Excelのコンテンツはコンソールに表示されますが、その隣には、( - >>>)でマークされたforループによって引き起こされるNullPointerExceptionがあります。 誰かが私を助けることができれば、私は非常に感謝しています、このコードは私にいくつかの頭痛を与えました。コードを見てForループNullPointerException 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

https://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it(リンクをフォーマットできません) – StephaneM

+0

Pleaseコードをデバッグします。あなたの 'i'がシートの行番号の範囲外に出ているように聞こえます。これは、' filasCount'の奇妙な計算が原因です。しかし、確実に確認する唯一の方法はデバッグであり、私たちはあなたのデータを持っていません。 –

+0

データの問題である必要があります。 –

答えて

1

あなたのシートは、おそらく欠落している行またはセルを持っています

は、以下のコードを試してみてください。 poiのスプレッドシートを反復処理する最良の方法は、このような構文for eachを使用することです。

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

} 

} 

多くの簡単な質問にはpoiウェブサイト上quick guideを見ることで答えることができます。

+0

あなたは私に完璧な解決策を与えてくれます!あなたの助け、挨拶、ありがとう – pablomrkite

0

、私はExcelシートの最初の行が空白の場合NullPointerExceptionが発生すると思います。だから、私は行のIteratorを作成しました。

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

"sheet.rowIterator()"に "sheet"というマークがついていて、 "sheet"という名前のクラスを作る必要があるとの回答が1つしかありません。 – pablomrkite

+0

誤植、私の悪い。今すぐチェック –

+0

IT WORKED!助けてくれてありがとう! – pablomrkite