JXL2.6修复版本最新下载:
http://dl.iteye.com/topics/download/4662fd6c-4dee-3dba-ac12-509ff9323258
特别说明:出现此问题是在和SpringMVC结合出现的,
请见:SpringMVC:生成Excel和PDFhttp://liuzidong.iteye.com/blog/1071823
参考资料
1 jxl java.lang.IndexOutOfBoundsException: Index: 21, Size: 21
http://blog.sina.com.cn/s/blog_5349193d0100mf2h.html
但是没有用呀!可能由于jxl的版本不同中,我用的是: 2.6的
说明:JXL的功能使用正常,但是后台报错,下载它的最新版本也一样,将它的源代码检查,发现少了NULl值的判断
报错如下:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at jxl.write.biff.WritableWorkbookImpl.getSheet(WritableWorkbookImpl.java:382)
at jxl.write.biff.WritableWorkbookImpl.write(WritableWorkbookImpl.java:825)
at org.springframework.web.servlet.view.document.AbstractJExcelView.renderMergedOutputModel(AbstractJExcelView.java:143)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:595)
修复源码二处
1 在源代码的方法: getSheet()如下
public WritableSheet getSheet(int index){
return (WritableSheet) sheets.get(index);
}
修改如下:
public WritableSheet getSheet(int index)
{
int size = sheets.size();
if(null == sheets || size == 0){
return null;
}
return (WritableSheet) sheets.get(index);
}
增加了集合为空的判断
2 在源代码的方法:write()方法体中:
if (!sheetSelected)
{
wsheet = (WritableSheetImpl) getSheet(0);
wsheet.getSettings().setSelected(true);
selectedSheetIndex = 0;
}
修复如下:
if (!sheetSelected)
{
wsheet = (WritableSheetImpl) getSheet(0);
if(wsheet != null)
wsheet.getSettings().setSelected(true);
selectedSheetIndex = 0;
}
由于上面报错有二个地方,所以只修改这二个有BUG的方法体.完成后将源代码重新打包为:jexcelapi_2_6_12_1.jar,将它置于WEB-INF/lib下运行OK
请大家下载附件的jexcelapi_2_6_12_1.jar包