SXSSFSheet调用createRow报错,并且调用getLastRowNum一直为0的问题

来源:互联网 发布:qq空间病毒式营销源码 编辑:程序博客网 时间:2024/06/07 03:03

在项目中碰到了一个问题,同样在网上发现已经有大神发现了类似的问题,请先看他的博客,地址为:
http://blog.csdn.net/zc123456zzc/article/details/47301461

我碰到的问题是:
SXSSFSheet对象调用getLastRowNum,返回值永远是0,但是在SXSSFSheet的一个属性_sh里(类型为XSSFSheet)如果sheet页有数据,_sh的rows不是0而是此sheet真实的行数(是否是POI的bug,不太确定)。此时的sheet第二行是空行,如果在第二行创建新的一行,SXSSFSheet的createRow方法会抛出异常,抛出异常的位置在SXSSFSheet.class文件的第131行:
此处的判断作用我理解为SXSSFSheet创建新行的时候,不能覆盖已存在的行,哪怕是空白行也会抛出异常,推测与SXSSFSheet的特性有关

而我们的excel模板,恰好有几个空白行,所以在执行createRow方法时此处抛出“ Attempting to write a row[1] in the range [0,4] that is already written to disk)”。
结合项目说的直白一点就是:尝试新建第一行时,发现这一行是存在的(这一行其实是空白行,行存在但是没有数据)。
注:项目中excel模板第一行为表头,下面没有数据却有四个空白行导致的问题。

由于SXSSFSheet的getLastRowNum方法永远为0,所以无法进行判断空白行的存在。
最后的解决办法只好就是将excel模板中的空行删除就好了。

阅读全文
0 0
原创粉丝点击