2

繰り返し発生する問題についてサポートが必要です。以前、私は同様の質問をしましたが、それは部分的に答えられました。ここでの質問 問題は、データがないか空白の行に書きたいと思うたびに、常に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");
                }   

            }
        }
    }
4

1 に答える 1

2

必要なセルが存在しない場合は、で作成する必要があります

HSSFRow.createCell(int columnIndex, int type) 

同様に、行が存在しない場合は、次のコマンドで作成します。

HSSFSheet.createRow(int rownum)

XSSFにも同じ方法があります。

于 2013-01-09T08:04:39.663 に答える