2013-11-21 145 views
0

我正在從Excel文件中讀取數據,該文件稍後將放入同一Java程序中的MySQL數據庫中。 我在將數據添加到數據庫時遇到問題:Eclipse一直顯示NullPointerException錯誤。 我與getLastRowNum()一起工作,它也計算了填充單元格後的一些空單元格。此問題已修復這段代碼(這裏我只算填補細胞的數量以及與此,而不是最後的行號工作):從xlsx文件讀取時出現NullPointerException

int rows = Sname.getLastRowNum(); 
int rows2 = 0; 

for(int kk = 1; kk<= rows; kk++) 
{ 
    XSSFRow row = Sname.getRow(kk); 
    XSSFCell cell = row.getCell(0); 

    if(cell != null) 
    { 
    rows2++; 
    } 
} 

上週它的工作,但現在我得到的java.lang。 NullPointerException在 XSSFCell cell = row.getCell(0);

我不明白爲什麼。 有人能幫助我嗎? 謝謝!

+1

我認爲您提供的代碼將保持無限循環,因爲'kk'變量不會沿for循環更新。這是實際的代碼嗎? – idiazt

+0

在循環結束時不會更新kk嗎? (int kk = 1; k <= rows; k ++)中的'k ++'將執行此操作。 這不是完整的程序,而是錯誤的相關部分。是的,這是實際的代碼。 – Jil

+0

不,你有'int kk = 1; kk <=行; ķ++'。所以你需要把'kk ++'而不是'k ++'。 – idiazt

回答

0

我認爲您的for應該從0開始,而不是從1開始,然後轉到rows-1

+0

是的,我知道這一點。我從第1行開始,因爲第0行包含每列的標題 – Jil

+0

對於'kk = rows'它不返回'null'?如果它在這裏的原因是你得到你的NPE的地方。 – John

+0

即使我把kk Jil

0

Sname.getLastRowNum();Sname.getRow(kk)正在扔NPE。請確保你已經初始化Sname

也要看你的for循環:

爲(INT KK = 1; KK < =行; k ++)

難道這甚至編譯?如果是,請將'k++'替換爲'kk++',否則最終會有無限迭代。

+0

'k'錯誤輸入,在程序中顯示'kk'。 XSSFSheet Sname = workbook.getSheetAt(0); - >這是我如何初始化Sname – Jil

+0

我可以打印出最後一行數,所以沒有空值。 如何查看Sname。getRow(kk)拋出一個NPE,我該如何解決這個問題? – Jil

+0

在這種情況下,在Sname上調用的兩個方法中的一個必須返回null或拋出NPE。 –

0

我認爲問題是在循環的極限。它應該去kk < rows而不是kk <= rows

事實上,在測試此解決方案之前,我會嘗試記錄Sname.getLastRowNum()的值並觀察它的值。