在使用jxl对Excel进行导入导出时,有时需要将一个Excel中的sheet复制到另外一个Excel中,此时可以使用WritableWorkbook中的importSheet方法。但是在使用该方法后运行时抛出了空指针异常:
java.lang.NullPointerException
at jxl.write.biff.SheetCopier.deepCopyCells(SheetCopier.java:996)
at jxl.write.biff.SheetCopier.importSheet(SheetCopier.java:542)
at jxl.write.biff.WritableSheetImpl.importSheet(WritableSheetImpl.java:2699)
at jxl.write.biff.WritableWorkbookImpl.importSheet(WritableWorkbookImpl.java:1897)
在网上搜了一些资料发现,该错误是由于jar包中的一个bug导致的,开发者应该使用&&来判断c.getCellFeatures()和c.getCellFeatures().hasDataValidation(),但是却使用&来进行判断,所以当前者为null时,程序仍然跑去判断第二个条件,所以抛出了空指针异常。源码如下:
if (c.getCellFeatures() != null &
c.getCellFeatures().hasDataValidation())
{
validatedCells.add(c);
}
解决办法:换了2.6.10版本的jar包,这个jar包中不存在该bug,可以正常使用importSheet方法。在这里分享一下jar包下载链接:http://www.java2s.com/Code/Jar/j/Downloadjxl2610jar.htm