使用Apache POI的空白列和行的空指针

时间:2013-01-09 05:38:47

标签: java apache-poi

我需要有关重复出现问题的帮助。早些时候我问了一个类似的问题,但部分答案。问题here 问题是,每次我想写一行没有任何数据或空白的行时,总是会出现空指针错误问题。我的临时解决方案是用数据填充这些行,这样我就可以在每一列上写一些东西。其中一位帮助过我的志愿者提供的解决方案也只是一个临时解决方案。我对我的代码做了一些改动(下面)。 空指针错误指向带有双星号的行。

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指示here我继续尝试该代码但是它不起作用所以我检查了Apache Docs并且他们有Row.Create_Null_as_Blank但我不确定它与MissingCellPolicy.Create_Null_as_Blank是否相同,或后者仅用于以前的poi版本。虽然这应该解决了关于空白的列或行的问题。我仍然有一个空指针异常错误。如果这有帮助,我正在使用Apache poi版本3.9 btw。任何帮助都非常感谢。谢谢

更新1

我使用jims解决方案更新了我的代码。我添加了一个方法来检查是否存在行。但我仍然有两个星号相同的错误显示。这是我的代码:

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

我找到了一个针对我的代码的解决方法,以防有人发现它有用。我没有使用row.getCell,因为我总是遇到NUll指针错误。见下面的代码

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");
                }   

            }
        }
    }

1 个答案:

答案 0 :(得分:2)

如果您需要的单元格不存在,则必须使用

创建
HSSFRow.createCell(int columnIndex, int type) 

同样,如果该行不存在,则使用

创建该行
HSSFSheet.createRow(int rownum)

XSSF也有相同的方法。