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)