如何在Java中读取包含空值的Excel单元格。。。?
我正在使用ApachePOI3.6。我有一列是空白的。我希望能够阅读它,然后转到下一个专栏。即使我可以解决如何在Java中读取包含空值的Excel单元格。。。?,java,apache,excel,apache-poi,Java,Apache,Excel,Apache Poi,我正在使用ApachePOI3.6。我有一列是空白的。我希望能够阅读它,然后转到下一个专栏。即使我可以解决NullPointerException问题,我也无法到达下一个单元格 以下是我的代码片段: HSSFCell cell = row.getCell(c); String value = null; switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_FORMULA: value = "FORMULA val
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);
如何解决我的问题?您需要检查一下是否有
单元格=null
,因为如果一行中不存在单元格,row.getCell(c)
返回null
那么,您可以在switch语句之前检查null,也可以更改对row.getCell的调用。检查Javadoc中的POI有两种形式,第一种是您正在使用的,第二种是一个额外的参数,类型为Row.MissingCellPolicy,您可以在其中传递一个值,该值将自动将空单元格转换为空白。我终于得到了我想要的。谢谢你。
我想分享要更改的确切代码段。
只需更换以下线路:
HSSFCell cell = row.getCell(c);
与
试试这个
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);
}
List cellDataList=newarraylist();
XSSF工作簿=新XSSF工作簿(fileInputStream);
XSSFSheet sheet=workbook.getSheetAt(0);
迭代器行=sheet.rowIterator();
int number=sheet.getLastRowNum();
int lineNumber=0;
while(rows.hasNext())
{
XSSFRow行=((XSSFRow)rows.next());
lineNumber++;
如果(行号==1){continue;}
迭代器单元格=行。单元格迭代器();
List celltemplast=newarraylist();
int current=0,next=1;
while(cells.hasNext())
{
XSSFCell cell=(XSSFCell)cells.next();
当前=cell.getColumnIndex();
如果(当前谢谢你,文卡特,除了
对于使用Apache 4.0.0及更高版本的用户,他们需要按照以下方式进行操作:
HSSFCell cell=row.getCell(c, org.apache.poi.ss.usermodel.Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
由于“单元格”是一个对象,据我所知,无法使用“==”或“!=”运算符来获取值。不是吗?但是单元格实际上存在,但它有一个“空白”值,即没有值。您可以使用==或!=检查空值,这是您应该做的。单元格很可能不存在(在数据结构中),这就是出现NullPointerException问题的原因。
HSSFCell cell=row.getCell(c, org.apache.poi.ss.usermodel.Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);