前言
接到一个需求需要将excel上多余的空行进行删除,保持数据的紧凑与严谨。
上网搜了一篇关于poi的删除空行技术说明文章,里面提到需要调用关键方法removeRow()。满心欢喜的我马上拿来使用,但是在我使用后的结果非常不好,那个空行还存在。苦苦的在网上搜索解决方案,经过几个小时奋战后,依然得不到满意的结果,非常苦恼。
问题
poi方法removeRow()调用后,空行依然存在
解决方案
绝望的我实在受不了,只能躲到后走廊里默默的抽了一根烟,思考解决方案。当一个人钻牛角尖的时候,最好的解决办法是放松自己。当我一放松,思维得到解决后,马上从另外一个角度解决解决方案。我以前发现一个有趣的现象就是,excel的过滤查询后得到的结果,看起来是把不需要的“过滤“掉,其实并没有,无效行其实一直都存在并没有删除,那Excel是怎么实现这个过滤效果的呢?很简单,将行的行高设为0。OK,解决方案出来了
将行高设为0,实现行的伪删除,以下为关键代码:
//删除空行
for(int i=0;i<sheet.getLastRowNum();i++) {
Row temp=sheet.getRow(i);
boolean id=true;
if(StringUtils.isNotBlank(temp.getCell(0)) || StringUtils.isNotBlank(temp.getCell(16))) {
id=false;
}
if(id)
temp.setHeight((short)0);
}
总结
顺利交付任务。虽然交付了任务,也解决了问题。但是从技术层面来说,我并没有解决为什么removeRow()方法调用后,相应的空行并没有删除。这个问题只能留待大神处理了