前提・実現したいこと
Excelの「投手」シートの選手の背番号、名前を順に表示していき、最後の行まで読み込み終わると「外野手」シートで同じ処理を行いたい。
発生している問題・エラーメッセージ
Excelの行を一行ずつ見ていき、nullが出るまで処理を続けたいが、値が入っていないセルを見ると次の処理へ移らずNullPointerExceptionが発生する。
![投手シート
外野手シート
Cell cell2 = row2.getCell(0);
この行でエラーが出ているようです。
Java
1Workbook workbook = WorkbookFactory 2 .create(new FileInputStream( 3 "C:Sample.xlsx")); 4 Sheet sheet = workbook.getSheet("投手"); 5 int a = 1; 6 7 Row row = sheet.getRow(a); 8 Cell cell = row.getCell(0); 9 while (cell != null) { 10 Row row2 = sheet.getRow(a); 11 Cell cell2 = row2.getCell(0); 12 Row row3 = sheet.getRow(a); 13 Cell cell3 = row3.getCell(1); 14 switch (cell2.getCellType()) { 15 case NUMERIC: 16 System.out.print("背番号" + (int)cell2.getNumericCellValue()+","); 17 default: 18 break; 19 } 20 switch (cell3.getCellType()) { 21 case STRING: 22 System.out.println("選手名 " + cell3.getStringCellValue()); 23 a++; 24 default: 25 break; 26 } 27 } 28 Workbook workbook2 = WorkbookFactory 29 .create(new FileInputStream( 30 "C:Sample.xlsx")); 31 Sheet sheet2 = workbook2.getSheet("外野手"); 32 int b = 1; 33 Row row4 = sheet2.getRow(b); 34 Cell cell4 = row4.getCell(0); 35 while (cell4 != null) { 36 Row row5 = sheet2.getRow(b); 37 Cell cell5 = row5.getCell(0); 38 Row row6 = sheet2.getRow(b); 39 Cell cell6 = row6.getCell(1); 40 switch (cell5.getCellType()) { 41 case NUMERIC: 42 System.out.print("背番号" + (int)cell5.getNumericCellValue()+","); 43 default: 44 break; 45 } 46 switch (cell6.getCellType()) { 47 case STRING: 48 System.out.println("選手名 " + cell6.getStringCellValue()); 49 b++; 50 default: 51 break; 52 } 53 }
試したこと
なかなかpoiについて詳しく書いている記事がなかったので「poi Excel 繰り返し」「java Excel 値取得 繰り返し」などで検索しても有用な記事を見つけることができませんでした。
while文ではなくfor文を使い、値が入っている部分を条件式として記述すると正常に動作したのですが、それだとExcelに値を追加した際コードもいちいち書き換える必要があるため、while文を使い「値があれば処理を行う」というようにすべきだと思いました。
自分で調べたり試していては埒が明かないと感じたので力をお借りしたいです。
回答2件
あなたの回答
tips
プレビュー