开始遇到的第一个问题,是执行到 Workbook workbook = transformer.transformXLS(new FileInputStream(file),beans); 就不往下走了,后来发现是少了这个包:
commons-jexl-2.0.1.jar
这个解决后,当我在模版中使用<jxl:foreach></jxl:foreach>循环时,又出现了第二个问题:报的异常如下:
java.lang.IllegalArgumentException: Minumum row number is 0
at org.apache.poi.ss.util.CellRangeAddressBase.validateRow(CellRangeAddressBase.java:63)
at org.apache.poi.ss.util.CellRangeAddressBase.validate(CellRangeAddressBase.java:51)
at org.apache.poi.hssf.usermodel.HSSFSheet.addMergedRegion(HSSFSheet.java:576)
at org.apache.poi.hssf.usermodel.HSSFSheet.shiftMerged(HSSFSheet.java:1164)
at org.apache.poi.hssf.usermodel.HSSFSheet.shiftRows(HSSFSheet.java:1248)
at org.apache.poi.hssf.usermodel.HSSFSheet.shiftRows(HSSFSheet.java:1211)
at net.sf.jxls.util.Util.shiftRows(Util.java:1036) ..........后面的省略.....
然后我在网上搜这个错误Minumum row number is 0,看到人家说是office2007的问题,换成office2003的就不会出错。我用的模版是xls2003格式的,也用2003的excel保存模版,读取运行还是会出现一样的问题,后来认真分析了下模版,发现是模版有问题。
出问题的模版:
因为有循环,直接合并掉包含循环的行是在jxl解析的模版中是不行的,把合并行和列的右边这个删掉,再执行,不会有问题,正常解析了。
解析就正常了: