我正在使用Apache POI 3.6。我有一个空白的列。我希望能够阅读它,然后转到下一栏。即使我能解决NullPointerException
问题,我也无法进入下一个单元格。
这是我的代码段:
HSSFCell cell = row.getCell(c);
String value = null;
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_FORMULA:
value = "FORMULA value=" + cell.getCellFormula();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
value = "NUMERIC value=" + cell.getNumericCellValue();
break;
case HSSFCell.CELL_TYPE_STRING:
value = "STRING value=" + cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BLANK:
value="";
break;
case HSSFCell.CELL_TYPE_ERROR:
value="error";
break;
default:
break;
}
System.out.println("CELL col=" + cell.getColumnIndex() + " VALUE=" + value);
如何解决我的问题?
答案 0 :(得分:9)
我终于得到了我想要的东西。我感谢mezmo。 我想分享要更改的确切代码段。 只需替换以下行:
HSSFCell cell = row.getCell(c);
带
HSSFCell cell=row.getCell(c, org.apache.poi.ss.usermodel.Row.CREATE_NULL_AS_BLANK );
答案 1 :(得分:5)
好吧,您可以在switch语句之前检查null,或者您可以更改对row.getCell的调用。检查JAVadoc的POI有两种形式,第一种是你正在使用的形式,第二种是另外一个参数,类型为Row.MissingCellPolicy,你可以传递一个值,将空单元格自动转换为空白。
答案 2 :(得分:2)
您需要检查是否cell!=null
,因为如果某个单元格不存在,row.getCell(c)
会返回null
答案 3 :(得分:0)
试试这个
List cellDataList = new ArrayList();
XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
XSSFSheet sheet = workbook.getSheetAt(0);
Iterator rows = sheet.rowIterator();
int number=sheet.getLastRowNum();
int lineNumber = 0;
while (rows.hasNext())
{
XSSFRow row = ((XSSFRow) rows.next());
lineNumber++;
if(lineNumber==1){continue;}
Iterator cells = row.cellIterator();
List cellTempList = new ArrayList();
int current = 0, next =1;
while(cells.hasNext())
{
XSSFCell cell = (XSSFCell) cells.next();
current = cell.getColumnIndex();
if(current<next){
}
else{
int loop = current-next;
for(int k=0;k<loop+1;k++){
cellTempList.add(null);
next = next + 1;
}
}
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
System.out.println(cell.getRichStringCellValue().getString());
cellTempList.add(cell.getRichStringCellValue().getString());
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cell.getNumericCellValue());
cellTempList.add(String.valueOf(cell.getNumericCellValue()));
break;
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
cellTempList.add(cell.getCellFormula());
break;
default:
System.out.println("Inside default");
}
next = next + 1;
}
cellDataList.add(cellTempList);
}
答案 4 :(得分:0)
谢谢Venkat,它对我也有用,除了
对于那些正在使用Apache 4.0.0及更高版本的用户,他们需要这样做:
HSSFCell cell=row.getCell(c, org.apache.poi.ss.usermodel.Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);