poi读取excel遇到空行

ylovep 2013-07-08 05:37:01
poi 读取 excel对数据进行封装
读取到很到空白行,在list<Map>里面有很多值为null的就是因为空白行造成,
请问如何避免读取空白行。
for (int k = 2; k <= sheet.getLastRowNum(); k++) {
Row row=sheet.getRow(k);
//读取每一列
for(int i=0;i<columnNum;i++){
//数据封装
}
}
我从第三行开始读取
...全文
19011 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
明常 2015-10-15
  • 打赏
  • 举报
回复
14楼正解。先用sheet.getPhysicalNumberOfRows()取得总行数,再过滤。用sheet.getLastRowNum()取到的不一定对。
int rowCount = sheet.getPhysicalNumberOfRows();
			for(int i=0; i<rowCount; i++) {
				HSSFRow row = sheet.getRow(i);
				if(null != row && row.getFirstCellNum() > -1) {
					rowNums++;
				}
			}
笨驴鱼 2015-07-10
  • 打赏
  • 举报
回复
导入poi的jar包 Row row = sheet.getRow(i); 如果得到的行是空的一行,可以根据row.getFirstCellNum()是否大于等于0 来判断, 该行为空那么:row.getFirstCellNum()=-1的,否则row.getFirstCellNum()=0 就可以了
李荣强 2015-05-25
  • 打赏
  • 举报
回复
同样是这个问题.row==null 是没有什么卵用的...
  • 打赏
  • 举报
回复 2
当遇到 .XLS 有空行时 选中那些没有数据的空行(全部选中) 然后 右键删除 选择 整行 然后保存
reyoapple 2014-10-11
  • 打赏
  • 举报
回复
看看这个效果:http://www.cnblogs.com/interdrp/p/4019583.html
reyoapple 2014-10-11
  • 打赏
  • 举报
回复
这个可能是你要实现的:http://www.cnblogs.com/interdrp/p/4019583.html
reyoapple 2014-10-11
  • 打赏
  • 举报
回复
这个可能是你要实现的:http://www.cnblogs.com/interdrp/p/4019583.html
Jacoke 2014-08-27
  • 打赏
  • 举报
回复
可以用迭代器进行循环,迭代器可以自动判断是否为空,为空的话,直接就跳到下一列了
半倾丨 2014-01-26
  • 打赏
  • 举报
回复
引用 5 楼 ch656409110 的回复:
跳过这样不就可以了吗??

					Row row = sheet.getRow(i);
					if (row == null) {
						continue;
					}
这样是不可以的,照样有空白行读出来。 就算是把Excel中空白行的内容全部清除了,只要有某一列被冻结,照样能读出所有的空白行,而且一直读到最大行 所以,我觉得 在该方法的基础上 再用某些特定的列来判断,比如你的编号列 什么的肯定会有数据 如果是“” 就不读了
oh_Maxy 2013-07-09
  • 打赏
  • 举报
回复
引用 3 楼 ylovep 的回复:
目前已经加了if(null!=row)判断还是对读到空白行放到map中 封装到map方法大致为 switch(cell.getCellType()){ case Cell.CELL_TYPE_BLANK: Vouchermap.put(“键”, 某行中的某一列); break; 至于为何还是读到空白行还望赐教。。。。 但是选择excel空白行后清除一下数据以及删除一下行后就不会出现读取空白行的问题。 疑问是:之前本来就是空白,为何我做了删除行后就好了。
LZ可以新建一个excel,把有用的数据行拷贝过去(别拷多了),这样试试。 感觉那些被读到的行,可能是被操作过了,虽然看起来是空的,实际上不是null了 另外一个解决法子,如果所有有效行保证都是非空字符串的话,那判断里增加一个条件 &&!"".equals(某行中的某一列)
ylovep 2013-07-09
  • 打赏
  • 举报
回复
目前已经加了if(null!=row)判断还是对读到空白行放到map中 封装到map方法大致为 switch(cell.getCellType()){ case Cell.CELL_TYPE_BLANK: Vouchermap.put(“键”, 某行中的某一列); break; 至于为何还是读到空白行还望赐教。。。。 但是选择excel空白行后清除一下数据以及删除一下行后就不会出现读取空白行的问题。 疑问是:之前本来就是空白,为何我做了删除行后就好了。
有点小冷 2013-07-09
  • 打赏
  • 举报
回复
楼上正解。。。。
  • 打赏
  • 举报
回复
跳过这样不就可以了吗??

					Row row = sheet.getRow(i);
					if (row == null) {
						continue;
					}
oh_Maxy 2013-07-08
  • 打赏
  • 举报
回复
俺觉得,sheet和row都要做非null判断。数据封装处可以做非null和非""判断。
dsl369 2013-07-08
  • 打赏
  • 举报
回复
可以根据行里的任何一个单元格做个判断啊.....

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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