POI读EXCEL报java.lang.NullPointerException

kgdjewxf 2009-10-19 03:26:34
public ArrayList FormExcel(String fileToBeRead) {
ArrayList list = new ArrayList();

try {

HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(
fileToBeRead));

HSSFSheet sheet = workbook.getSheetAt(0);
// 获得SHEET表的行数
int num = sheet.getLastRowNum();
System.out.println(num);
System.out.println(sheet.getLastRowNum());
System.out.println(sheet.getFirstRowNum());
// Date类型数据转换为String
SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd");
for (int i = 1; i <= num; i++) {
QQ qq = new QQ();
HSSFRow row = sheet.getRow(i);
HSSFCell cell1 = row.getCell((short) 0);
HSSFCell cell2 = row.getCell((short) 1);
HSSFCell cell3 = row.getCell((short) 2);
HSSFCell cell4 = row.getCell((short) 3);
// 注意EXCEL表单是空白(只考虑字符,日期类型)的情况.要判断为空则要有默认类型数据代替.否则读不出后面的数据

qq.setQq(cell1.getNumericCellValue());

if (cell2.getCellType() == HSSFCell.CELL_TYPE_STRING) {

if (cell2 != null
&& !(cell2.getCellType() == HSSFCell.CELL_TYPE_BLANK)) {
qq.setName(cell2.getRichStringCellValue().toString());
}
} else {
qq.setName("");
//cell2=row.createCell((short) 1);
//cell2.setCellType(HSSFCell.CELL_TYPE_STRING);
// cell2.setCellValue("");
//qq.setName(cell2.getRichStringCellValue().toString());
}

System.out.print(cell1.getNumericCellValue());
System.out.print(cell2.getRichStringCellValue());
System.out.print(cell3.getNumericCellValue());
System.out.println(cell4.getDateCellValue());

qq.setScale(cell3.getNumericCellValue());

if (!(cell4.getCellType() == HSSFCell.CELL_TYPE_BLANK)) {
Date d = cell4.getDateCellValue();

String date1 = formatDate.format(d);
qq.setDate1(date1);
} else {
qq.setDate1(null);
}
list.add(qq);

}

} catch (Exception e) {
System.out.println("读取EXCLE记录有错 : " + e);
// 读取EXCEL数据出异常就设置LIST为NULL
list = null;
}
return list;
}


上面是我写的一个读取EXCEL表中的数据先一条条的封装到一个JAVABEAN中.在把这个BEAN加到ArrayList中去..现在问题就当读取EXCEL CELL是空白字符类型就会报:读取EXCLE记录有错 : java.lang.NullPointerException
感觉有些奇怪..那位大虾帮帮小弟看看.小弟在此先谢谢了.
...全文
1785 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
一洽客服系统 2009-10-19
  • 打赏
  • 举报
回复

public static Object getcellValue(HSSFCell cell){

int type = cell.getCellType();
switch(type)
{
case 3:
return "";

case 4:
return (Boolean)cell.getBooleanCellValue();

case 5:
return "#ERR" + cell.getErrorCellValue();

case 2:
return cell.getCellFormula();

case 0:
if(HSSFDateUtil.isCellDateFormatted(cell))
{

return sdf.format(cell.getDateCellValue());
} else
{
return (Double)cell.getNumericCellValue();
}

case 1:
return cell.getRichStringCellValue().getString();
}
return "Unknown Cell Type: " + cell.getCellType();

}



我程序经常使用的excel读取的方法。你可以试下。
你那个获得cellvalue以后很可能是null 后面接toString必然报nullpointer错误了
wangju309 2009-10-19
  • 打赏
  • 举报
回复
设断点跟踪一下,空指针问题很好解决
farfromcross 2009-10-19
  • 打赏
  • 举报
回复
建议你设个端点跟踪以下。还有你的具体错误信息可以贴出来,要不大家也不知道到底是哪句话报的空指针异常。
还有你自己写的
// 注意EXCEL表单是空白(只考虑字符,日期类型)的情况.要判断为空则要有默认类型数据代替.否则读不出后面的数据
如果是空的Excel cell按照你这里的解释肯定会出问题啊

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧