0

既存のExcelシートを書き込もうとしています。ただし、以下のコードを実行すると NPE が発生します。ターゲット セルに値がある場合、コードは正常に機能します。しかし、それが空のセルの場合、NPE が発生します。

FileInputStream myInput = new FileInputStream(fileName);
            POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);
            Workbook myWorkBook = new HSSFWorkbook(myFileSystem);
            Sheet mySheet = myWorkBook.getSheetAt(0);
            myRow = mySheet.getRow(20);
            myCell = myRow.getCell(0);
            //myCell = myRow.createCell(0);
            myCell.setCellValue("praveen");
            FileOutputStream myOutput = new FileOutputStream(fileName);
            myWorkBook.write(myOutput);
            myOutput.close();
4

4 に答える 4

2

public HSSFRowのjavadocからgetRow(int rowIndex)

0ベースの論理行(物理ではない)を返します。定義されていない行を要求すると、nullが返されます。つまり、行4はシートの5番目の行を表します。

于 2012-10-08T16:55:16.390 に答える
0

NPEがその行にスローされている場合は、検索している特定の行が未定義であることを意味します。全体的な構造をチェックすることに加えて、検索するインデックスが最小インデックスと最大インデックスの間にあることを検証して行を取得する前に、いくつかのチェックを追加して防御プログラミングを行う必要があります。

//assuming a cellIndex int parameter, the code should look like
myRow = mySheet.getRow(20);
if(myRow.getFirstRowNum() < cellIndex && cellIndex < myRow.getLastRowNum())
    myCell = myRow.getCell(0);
else
    //Throw an exception, log something, skip the operation or create a new row.
于 2012-10-08T17:01:42.467 に答える