繰り返し発生する問題についてサポートが必要です。以前、私は同様の質問をしましたが、それは部分的に答えられました。ここでの質問 問題は、データがないか空白の行に書きたいと思うたびに、常にnullポインタエラーの問題が発生することです。私の一時的な解決策は、これらの行にデータを入力して、各列に何かを書き込むことができるようにすることでした。また、私を助けてくれたボランティアの一人によって与えられた解決策は、一時的なものにすぎませんでした。コードに関していくつか変更を加えました(以下)。ヌルポインターエラーは、二重アスタリスクの付いた行を指します。
public void writeSomething(XSSFWorkbook wb){
for (String elem: listOfSheetNames){
if (elem.equals("Sheet2")){
sheet = wb.getSheet(elem);
XSSFRow row = sheet.getRow(2);
**XSSFCell cell = row.getCell(3, Row.CREATE_NULL_AS_BLANK );
if (cell.getCellType() == Cell.CELL_TYPE_BLANK){
cell = row.createCell(3);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue("this was blank");
}
}
}
}
問題の調査を続けたところ、ここに示されているMissingCellPolicyを使用していることがわかりました。そのコードを試しましたが、機能しないため、Apache Docsを確認したところ、Row.Create_Null_as_Blankがありますが、それが正しいかどうかはわかりません。 MissingCellPolicy.Create_Null_as_Blankと同じか、後者は以前のpoiバージョンで使用されていました。これにより、空白の列または行に関する問題が解決されたはずですが。それでもnullポインタ例外エラーが発生しました。これが役立つ場合は、Apachepoiバージョン3.9を使用しています。どんな助けでも大歓迎です。ありがとう
更新1
jimsソリューションを使用してコードを更新しました。行が存在するかどうかをチェックするメソッドを追加しました。しかし、2つのアスタリスクが付いた同じエラーショーがまだあります。これが私のコードです:
public void writeSomething(XSSFWorkbook wb){
for (String elem: listOfSheetNames){
if (elem.equals("Sheet2")){
int y=1;
sheet = wb.getSheet(elem);
XSSFRow row = null; //create row variable outside if scope
if (isRowEmpty(sheet.getRow(4))== false){
row = sheet.createRow(4);
}
**XSSFCell cell = row.getCell(y, Row.CREATE_NULL_AS_BLANK );
if (cell.getCellType() == Cell.CELL_TYPE_BLANK){
cell = row.createCell(y);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue("Hooooy this was blank");
}
}
}
}
isRowEmpty
public boolean isRowEmpty(Row row){
if (row == null){
return true;
}
else {
return false;
}
}
アップデート2
誰かがコードを便利だと思った場合に備えて、コードの回避策を見つけました。常にNUllポインターエラーが発生するため、row.getCellは使用しませんでした。以下のコードを参照してください
public void writeSomething(XSSFWorkbook wb){
for (String elem: listOfSheetNames){
if (elem.equals("Sheet2")){
int y=1; //sets column number
sheet = wb.getSheet(elem);
XSSFRow row = null; //create row variable outside if scope
if (isRowEmpty(sheet.getRow(19))== false){
row = sheet.createRow(19);
XSSFCell cell = row.createCell(y);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue("Hooooy this was blank");
}
}
}
}