使用JXL生成Excel时发生java.lang.ArrayIndexOutOfBoundsException错误
来源:互联网 发布:java double运算误差 编辑:程序博客网 时间:2024/05/01 23:20
错误信息如下:
......
java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at jxl.biff.StringHelper.getBytes(StringHelper.java:127)
at jxl.write.biff.WriteAccessRecord.<init>(WriteAccessRecord.java:59)
at jxl.write.biff.WritableWorkbookImpl.write(WritableWorkbookImpl.java:726)
......
神奇的是,在项目中发现该现象只有在Linux环境下才发生而Window下则正常运行。
根据错误信息的提示,发现问题出在WriteAccessRecord文件里,其源代码如下所示:
分析上诉代码发现,byte数组data的最大长度被定义为112,当被传入的参数userName达到一定长度时就会抛错。
跟踪代码WritableWorkbookImpl发现,userName实际就是WorkbookSettings类中的writeAccess字段,亦即生成Excel是的用户信息。可能在linux环境UTF8下每个汉字的字节数为3位(Windows中是2位)的缘故,出现了上诉的奇异现象。
解决的办法如下:
1.修改JXL源代码中WriteAccessRecord文件代码,重新设置变量data的长度,例如:data = new byte[astring.getBytes().length];
2.一般我们在读取模板文件生成新的Excel时往往使用如下代码:
只要在代码中强制设置变量WorkbookSettings.writeAccess的值即可,例如:
Workbook wb = Workbook.getWorkbook(new File("C:/data_template.xls"));
WorkbookSettings settings = new WorkbookSettings ();
settings.setWriteAccess(null);
WritableWorkbook workbook = Workbook.createWorkbook(new File("C:/data_output.xls"), wb, settings);
WritableSheet sheet = workbook.getSheet(3);
sheet.getSettings().setSelected(true);
workbook.write();
workbook.close();
- 使用JXL生成Excel时发生java.lang.ArrayIndexOutOfBoundsException错误
- 使用JXL生成Excel时发生java.lang.ArrayIndexOutOfBoundsException错误
- 使用JXL生成Excel时发生java.lang.ArrayIndexOutOfBoundsException错误
- Linux环境下 使用JXL生成Excel时发生java.lang.ArrayIndexOutOfBoundsException
- 在Linux环境下使用JXL生成Excel时发生ArrayIndexOutOfBoundsException错误
- jxl 错误 java.lang.ArrayIndexOutOfBoundsException: 441
- jxl操作java.lang.ArrayIndexOutOfBoundsException: 441 错误
- jxl导出excel异常:java.lang.ArrayIndexOutOfBoundsException: 31
- JXL导出Excel抛java.lang.ArrayIndexOutOfBoundsException: 5
- 解决jxl导出excel异常:java.lang.ArrayIndexOutOfBoundsException
- [经验小结]jxl写excel时产生“java.lang.ArrayIndexOutOfBoundsException: 5”问题的解决办法
- [java.lang.arrayindexoutofboundsexception]错误!
- android使用getItemViewType时出现java.lang.ArrayIndexOutOfBoundsException的错误
- jxl java.lang.ArrayIndexOutOfBoundsException: 164 异常解决方法
- jxl读取excel,Java heap space,ArrayIndexOutOfBoundsException,java.lang.System.arraycopy(Native Method),
- java.lang.ArrayIndexOutOfBoundsException: 0错误
- jxl在linux环境下报java.lang.ArrayIndexOutOfBoundsException
- AXMLPrinter2.jar反编译xml文件时 java.lang.ArrayIndexOutOfBoundsException错误
- 简易方法淡入淡出启动画面
- 内存泄露
- 移植交换芯片SDK到Linux系统
- 代码生成技术在当前软件开发中的位置
- 我想学jsp
- 使用JXL生成Excel时发生java.lang.ArrayIndexOutOfBoundsException错误
- 中国人必须知道的76个常识
- 配置Data Guard涉及到的参数详解
- 嵌入式webserver中cgi程序的调用
- 37-谨慎的进行优化
- SSH 最小必须要的包
- c++拷贝构造函数的学习笔记(续)
- debian下中文显示与输入法scim
- 有梦才能成真