`

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

    博客分类:
  • Java
阅读更多
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包
分享到:
评论
2 楼 liuzidong 2011-09-01  
谢谢你的指出!
    public WritableSheet getSheet(int index)  
     {      
    if(null == sheets || 0 == sheets.size()){  
        return null;  
    }  
       return (WritableSheet) sheets.get(index);  
     }  
1 楼 cryolite 2011-08-31  
int size = sheets.size();    
if(null == sheets || size == 0){ 

你这改的代码明显有问题

相关推荐

    jxl 2.6 API.chm下载

    这是java操作excel的jxl2.6的API,chm格式的

    jxl.jar包(2.6).zip

    jxl.jar是通过java操作excel表格的工具类库,开发过程中经常需要用到数据的导入导出功能,之前用的是POI,这次使用JXL,JXL相对于POI来说要轻量简洁许多,在数据量不大的情况下还是非常实用的。

    jxl-2.6.jar

    jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可 供使用,一个是POI,一个是jExcelAPI。其中功能相对POI比较弱一点。但jExcelAPI对中文支持非常好,API是纯Java的, 并不 依赖...

    使用jxl技术:jxl教程

    使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事。在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来越强烈,目前较为流行的操作是在...

    jxl-2.6.jar包和常用方法例子

    jxl-2.6.jar包和常用方法例子 Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应用来处理Excel...

    jxl 2.6 jar

    通过java操作excel表格的工具类库,使用jxl,java可以方便的读写excel文件。

    jxl-2.6.12.zip

    需要的下载

    NoClassDefFoundError: jxl/WorkbookSettings

    NULL 博文链接:https://liuzidong.iteye.com/blog/711509

    jxl-2.6.10.jar包

    jxl是用于操作excel的jar包,是2.6.10版本的jar包,可以方便使用importSheet函数 第一次上传资源,希望可以对大家有用,多多支持

    关于jxl操作excel说明以及jxl.jar包下载2.6

    jxl操作excel说明以及jxl jar包

    jxl.jar原版、修改后的jxl.jar解决web dynpro中乱码问题

    jxl.jar在web dynpor中读取Excel文件时,会导致乱码的产生,修改这个包中的java文件后就可以解决

    jxl包,解决Excel

    jxl是java关于Excel的一个工具类,同样的工具类还有apache的poi,jxl在进行数据量较大的工作中性能较强于poi,但是在样式上逊色于poi,数据量小的时候,推荐使用

    jxl 读取xml 解决中文乱码后的jar包

    在原jxl 包上解决中文乱码,在jdk1.4以上读取中文正常

    解决JXL调用copySheet()和importSheet()方法时报异常的jar包

    at jxl.write.biff.WritableSheetCopier.shallowCopyCells(WritableSheetCopier.java:499) [jxl.ja r:na] at jxl.write.biff.WritableSheetCopier.copySheet(WritableSheetCopier.java:239) [jxl.jar:na] at ...

    JXL教程 JXL开发文档 JXL学习笔记 JXL示例

    JXL教程 JXL开发文档 JXL学习笔记 JXL示例。

    jxl-2.6.jar.zip(613 k).ZIP

    java操作Excel文件的jar,方便学习

    jxl_1.0.0.jar

    利用WritableWorkbook 生成excel功能 所使用的jxl_1.0.0.jar 代码示例见:java实现excel导出功能

Global site tag (gtag.js) - Google Analytics