我的excel表格有以下数据
1234556 gold
1234456 silver
null null
4455455 platinum我将如何使用缺失的will策略读取整个空行?我尝试使用丢失的cellpolicy进行编码,但无法获得所需的输出。
for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
List cellTempList = new ArrayList();
Row r = hssfSheet.getRow(rowNum);
int lastColumn = Math.max(r.getLastCellNum(), 2);
if(r.getRowNum()==0||r.getRowNum()<=i){
continue; //just skip the rows if row number is 0 or 1
}
for (int cn = 0; cn < lastColumn; cn++) {
Row row = hssfSheet.getRow(rowNum);
Cell cell = row.getCell(cn, Row.CREATE_NULL_AS_BLANK);
// Cell cell = row.getCell(cn, Row.RETURN_NULL_AND_BLANK);
//if(row.getCell(cn)==null){
//cellTempList.add("Null");
if(cell.getCellType()==cell.CELL_TYPE_NUMERIC && cell.getColumnIndex()==0 )
{//call phone number validation method
DecimalFormat df = new DecimalFormat("#");
String cellValue=df.format(cell.getNumericCellValue());
cellTempList.add(cellValue.toString());
logger.debug("Adding cell having string to "+cellTempList);
}
else if(cell.getCellType()==Cell.CELL_TYPE_STRING)
{//call string validation method
cellTempList.add(cell.toString());
logger.debug("Adding cell having string to "+cellTempList);
}
else{cellTempList.add(cell.toString()+"-");
//errorList.add(cell.getErrorCellValue());
errorList.add(cell.getRowIndex() + "$" + cell.getColumnIndex()+ "$" );
System.out.println(errorList);
}
}cellDataList.add(cellTempList);
}
} System.out.println(cellDataList); 使用此代码,它只在空行上方打印2行,剩下第4行要打印。帮帮我
发布于 2014-01-15 19:24:07
我很久以前就使用过Apache POI,但是为了读取空单元格,我做了如下操作
Cell cell=row.getCell(index);
if(cell!=null && cell.toString().isEmpty){
System.out.println("The cell is empty");
}为了得到最后一行,你知道有多少最大列数:sheet.getLastRowNum()
所以现在你要做的就是得到第一行的索引,然后从第一行循环到最后一行。先获取行,然后获取单元格,也会得到空单元格,但您可以决定如何处理它们。
发布于 2014-01-16 14:54:50
private String getCellValue(Cell cell) {
if (cell == null) {
return null;
}
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
return cell.getStringCellValue();
} else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
return cell.getNumericCellValue() + "";
} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
return cell.getBooleanCellValue() + "";
}else if(cell.getCellType() == Cell.CELL_TYPE_BLANK){
return cell.getStringCellValue();
}else if(cell.getCellType() == Cell.CELL_TYPE_ERROR){
return cell.getErrorCellValue() + "";
}
else {
return null;
}
}发布于 2014-01-16 17:59:07
看起来除了您使用的for循环之外,所有的东西都工作正常。
代替for (int rowNum = rowStart; rowNum < rowEnd; rowNum++)
您应该使用for (int rowNum = rowStart; rowNum <= rowEnd; rowNum++)
实际上,循环在到达最后一行之前就退出了。请记住,据我所知,rowEnd只不过是sheet.getLastRowNum();,它是基于零索引的。因此,在这种情况下,当你实际有4行时,它将只给你3行,在执行时,循环只对第0行、第1行、第2行执行,然后退出。
https://stackoverflow.com/questions/21135426
复制相似问题