Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Apache POI的空白列和行的空指针_Java_Apache Poi - Fatal编程技术网

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

Java 使用Apache POI的空白列和行的空指针,java,apache-poi,Java,Apache Poi,我需要关于一个反复出现的问题的帮助。早些时候,我问了一个类似的问题,但得到了部分回答。问题: 问题是,每当我想在没有任何数据或空白的行上写入时,总会遇到空指针错误问题。我的临时解决方案是用数据填充这些行,这样我就可以在每一列上写一些东西。另外,帮助我的一位志愿者给出的解决方案只是暂时的。我对我的代码做了一些修改(如下)。 空指针错误指向带双星号的行 public void writeSomething(XSSFWorkbook wb){ for (String elem: lis

我需要关于一个反复出现的问题的帮助。早些时候,我问了一个类似的问题,但得到了部分回答。问题: 问题是,每当我想在没有任何数据或空白的行上写入时,总会遇到空指针错误问题。我的临时解决方案是用数据填充这些行,这样我就可以在每一列上写一些东西。另外,帮助我的一位志愿者给出的解决方案只是暂时的。我对我的代码做了一些修改(如下)。 空指针错误指向带双星号的行

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文档,他们有Row.Create_Null_as_Blank,但不确定它是否与MissingCellPolicy.Create_Null_as_Blank相同,或者后者只是在以前的poi版本中使用。虽然这应该解决了列或行为空的问题。我仍然有一个空指针异常错误。我正在使用ApachePOI版本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");
                }

            }
        }
    }
我饿了 更新2 我为我的代码找到了一个变通方法,以防有人发现它有用。我没有使用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");
                }   

            }
        }
    }

如果所需的单元格不存在,则必须使用创建它

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

HSSFSheet.createRow(int rownum)

XSSF也有相同的方法。

通过使用以下代码获取值并执行空检查,我只是想知道如何添加这些代码行。因为我需要声明第一个XSSFCell cell=row.getCell。。。然后检查单元格类型。但是当我声明XSSFCell单元格时,代码停止运行,因此无法检查它包含的单元格类型方法//返回字符串,检查是否为空。无需再次检查wat cell containsRows也可以为空!您确定您使用的行存在吗?嗨,gagravarr,我相信行不存在,所以我将尝试Jims解决方案。谢谢Jim,谢谢您的回答。我只是想知道您使用的Apache POI版本是什么,因为我使用的是version 3.9.我找不到HSSFSHeet.createRow(int)方法。嗨,吉姆,谢谢,我找到了它。我只是忘了回答我自己的问题。但是我已经按照上面所示编辑了我的代码,错误仍在显示。感谢你的时间,我正在尝试创建第4行和第1单元格,即y=1。我有这个XSSFCell cell=row.getCell的源代码(y,Row.CREATE_NULL_AS_BLANK)isRowEmpty()的定义是什么??您确定它符合您的期望吗?
HSSFRow.createCell(int columnIndex, int type) 
HSSFSheet.createRow(int rownum)