首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JXL2.6:解决JXL的IndexOutOfBoundsException getSheet有关问题

2012-10-24 
JXL2.6:解决JXL的IndexOutOfBoundsException getSheet问题JXL2.6修复版本最新下载:http://dl.iteye.com/to

JXL2.6:解决JXL的IndexOutOfBoundsException getSheet问题
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包

    public WritableSheet getSheet(int index)       {          if(null == sheets || 0 == sheets.size()){          return null;      }         return (WritableSheet) sheets.get(index);       }  

热点排行