最近在做excel数据导入模块,不通过服务器,以文件流的形式传输excel,直接导到相应的数据库表中.用poi的方式可以实现.但在导入数据时候,遇到了数据中如果有空行,或者空行的cell中有空格,导入到数据库中将会是空的数据.但是需求是如果遇见数据导入时,某一行没有数据为空行,或者空行中的cell有空格时,将终止数据导入.也就是说遇到excel表中为某行为空时,将不再往数据库表中插入数据.附上部分源代码.

for (int irow = Integer.parseInt(headLine.trim()); irow <= rsrows; irow++) ...{
boolean flag= false;
row = rs.getRow(irow);
Map map = new HashMap();
if(row == null)...{
break;
}
if(row != null)...{ //row为excel表的某一行
for (short icol = 0; icol < row.getLastCellNum(); icol++)...{
try ...{
cl = row.getCell(icol); //cl为excel表中某一个单元
if(cl==null)...{
temp = "";
}
else...{
if (cl.getCellType() == 0) ...{ //判断导入的数据类型
double ad=cl.getNumericCellValue();
if(ad==(long)ad)
temp=Long.toString((long)ad);
else
temp=Double.toString(ad); 
} else if (cl.getCellType() == 1) ...{
temp = cl.getStringCellValue();
} else if (cl.getCellType() == 3) ...{
temp = "";
}
}
System.out.println("excel(" + irow + "," + icol+ ")=" + temp); //打印出cell中值
map.put("" + icol, temp);

} catch (Exception e)...{
break;
}
}
Iterator iter = map.entrySet().iterator(); 
while(iter.hasNext())...{
Map.Entry element = (Map.Entry) iter.next();
String strKey = (String)element.getKey();
String strValue =(String) element.getValue();
if(!StrUtils.isNull(strValue))...{
flag = true;
}
}
if(!flag)...{
break;
}
ediList.add(map);
}
}
在对cell中数据类型的判断中,只判断了string,double,和boolean,如果excel表中有时间格式的数据存在,没有用方法实现将自动转化为double型的时间,转化回时间格式的数据插入到数据库中.
将excel表中数据导入到数据库功能可以实现,但也存在问题,就是当数据量很大的excel表导入时,会报出OutOfMemory异常.我没有通过批量导入的方法实现excel表数据导入.不知道有没有更好的方式实现大数据量的excel表导入,前提是使用poi这种方式实现.
第一次发帖,有很多不足的地方,还请各位大虾谅解,最近在研究poi对excel表中数据导入,导出的问题,希望和各位多多交流,共同进步.您给我的意见和建议,我将虚心接受,并改正,不论是编程风格还是编程思想,都需要得到提高.也希望大家能够给我一些相关的经验和技巧.
最近在做poi数据导出的时候遇见的问题,自己定义的list赋值后,通过类方法的调用可以实现流方式的excel数据下载到本地.现在要求通过传过来的list,map或者dbbean的方式,实现excel数据下载.也就是自己要新定义3个方法来分别实现这3种情况.还有一个问题就是如何让导出的excel表数据根据单元格的大小自动调整..上网找过这方面的资料也没有很好的解决这个问题.
本文介绍使用POI进行Excel数据导入时遇到的问题及解决方案,包括处理空行、空格及不同数据类型,同时探讨大数据量导入时的内存优化方法。
497

被折叠的 条评论
为什么被折叠?



