Linux环境下 使用JXL生成Excel时发生java.lang.ArrayIndexOutOfBoundsException

私有化大模型部署:企业AI应用的核心架构 私有化大模型部署不是“一次性项目”,而是企业AI的“长期主义”投资——它需要企业投入时间、金钱和精力,但回报是数据安全、定制化能力、核心竞争力的提升。就像“自家厨房”一样,私有化大模型可能初期麻烦,但一旦搭建起来,就能为企业“做”出符合自己口味的“特色菜”,而这些“特色菜”,正是企业在激烈竞争中的“护城河”。愿你能构建属于自己的“AI大脑”,让技术真正赋能业务,让复杂变简单,让深奥变通透。附录:私有化大模型部署架构图(注:可根据企业需求调整,此为通用架构) 阅读详情

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文件里,其源代码如下所示:

[java]  view plain copy
  1. package jxl.write.biff;  
  2.   
  3. import jxl.Workbook;  
  4. import jxl.biff.StringHelper;  
  5. import jxl.biff.Type;  
  6. import jxl.biff.WritableRecordData;  
  7.   
  8. /** 
  9.  * The name used when Excel was installed.   
  10.  * When writing worksheets, it uses the value from the WorkbookSettings object, 
  11.  * if this is not set (null) this is hard coded as 
  12.  * Java Excel API + Version number 
  13.  */  
  14. class WriteAccessRecord extends WritableRecordData  
  15. {  
  16.   /** 
  17.    * The data to output to file 
  18.    */  
  19.   private byte[] data;  
  20.   
  21.   // String of length 112 characters  
  22.   /** 
  23.    * The author of this workbook (ie. the Java Excel API) 
  24.    */  
  25.   private final static String authorString = "Java Excel API";  
  26.   private String userName;  
  27.   
  28.   /** 
  29.    * Constructor 
  30.    */  
  31.   public WriteAccessRecord(String userName)  
  32.   {  
  33.     super(Type.WRITEACCESS);  
  34.   
  35.     data = new byte[112];  
  36.     String astring = userName != null ?  
  37.         userName :  
  38.         authorString + " v" + Workbook.getVersion();  
  39.   
  40.     StringHelper.getBytes(astring, data, 0);  
  41.   
  42.     // Pad out the record with space characters  
  43.     for (int i = astring.length() ; i < data.length ;i++)  
  44.     {  
  45.       data[i] = 0x20;  
  46.     }  
  47.   }  
  48.   
  49.   /** 
  50.    * Gets the data for output to file 
  51.    *  
  52.    * @return the binary data 
  53.    */  
  54.   public byte[] getData()  
  55.   {  
  56.     return data;  
  57.   }  
  58. }  

分析上诉代码发现,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.修改代码,不使用WriteAccessRecord。在读取模板文件生成新的Excel时往往使用如下代码:

[java]  view plain copy
  1. import java.io.File;  
  2.   
  3. import jxl.Workbook;  
  4. import jxl.write.WritableSheet;  
  5. import jxl.write.WritableWorkbook;  
  6.   
  7. public class Test {  
  8.   
  9.     public static void main(String[] args) throws Exception {  
  10.   
  11.         Workbook wb = Workbook.getWorkbook(new File("C:/data_template.xls"));  
  12.         WritableWorkbook workbook = Workbook.createWorkbook(new File("C:/data_output.xls"), wb);  
  13.           
  14.         WritableSheet sheet = workbook.getSheet(3);  
  15.         sheet.getSettings().setSelected(true);  
  16.           
  17.         workbook.write();  
  18.         workbook.close();  
  19.     }  
  20. }  

只要在代码中强制设置变量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(); 

数电发票“乐企直连”服务平台建设方案 数字化电子发票“乐企直连”服务平台建设方案 阅读详情

相关推荐

血管分割中的直径平衡难题:从clDice到cbDice的演进与实践

本文探讨了血管分割中的直径平衡难题,详细分析了从clDice到cbDice的技术演进与实践。通过引入半径感知权重和边界对齐惩罚,cbDice在保持拓扑完整性的同时提升了几何敏感度,显著改善了细小血管的分割效果。文章还分享了在nnU-Net中实现cbDice的工程细节,包括GPU加速骨架提取和多任务损失组合策略,为医学影像分析提供了重要参考。

weixin_29170327的博客 244

使用JXL生成Excel时发生java.lang.ArrayIndexOutOfBoundsException错误

错误信息如下: ...... java.lang.ArrayIndexOutOfBoundsException at java.lang.System.arraycopy(Native Method) at jxl.biff.StringHelper.getBytes(StringHelper.java:127) at jxl.write.bif

deng11342的专栏 1万+

mtk-drm commit送显流程(二):内核态atomic_commit实现解析

本文深入解析了mtk-drm框架中atomic_commit机制的内核态实现流程,详细介绍了从用户态触发到硬件提交的完整调用链,包括状态检查、硬件提交等关键阶段。特别分析了MTK平台在动态刷新率、内存带宽优化等方面的特有实现策略,为开发者提供了调试技巧和常见问题解决方案。

weixin_30839881的博客 1308

java.lang.ArrayIndexOutOfBoundsException

java.lang.ArrayIndexOutOfBoundsException is a runtime exception, so it’s a unchecked exception and don’t need to be thrown explicitly from method. Refer Exception Handling in java java.lang.ArrayIndex...

从零开始的教程世界 2万+

概率论—期末复习速成笔记(自用)

概率论期末复习

a200327的博客 2万+

国产Flash替代方案:手把手教你用XSCT烧写ZYNQ7045的BOOT.BIN(附完整命令解析)

本文详细介绍了国产Flash替代方案在ZYNQ7045上的应用,通过XSCT工具链实现BOOT.BIN的精准烧写。内容涵盖国产Flash兼容性检查、PetaLinux环境搭建、XSCT烧写全流程及故障排查,帮助开发者高效完成国产化替代,提升硬件开发效率。

weixin_33670786的博客 430

4、java数组中的常见异常-数组角标java.lang.ArrayIndexOutOfBoundsException\空指针异常java.lang.NullPointerException

常见的数组上的报错就是两种: 1、java.lang.ArrayIndexOutOfBoundsException 数组角标越界的异常 2、java.lang.NullPointerException 空指针的异常 数组角标越界的异常: 数组角标超过了范围,例如负数的索引角标(python中是可以有负数索引的)或者右边超过了数组的最大索引。 空指针的异常: 还没初始化,就去找里面的指针了。 没有指针 总结,想要使用、输出值是null的变量、元素时,会有空指针报错。 pack...

程序员养成之路的博客 2058

深入解析Android SoundTrigger架构:从HIDL到AIDL的演进与实践

本文深入解析Android SoundTrigger架构,从HIDL到AIDL的演进与实践。SoundTrigger是Android系统中低功耗语音唤醒的关键技术,通过分层设计和硬件协同实现高效语音识别。文章详细介绍了核心组件、HIDL与AIDL的对比及优化技巧,帮助开发者掌握语音模型优化和功耗管理。

brown的博客 231

解决jxl导出excel异常:java.lang.ArrayIndexOutOfBoundsException

jxl ArrayIndexOutOfBoundsException异常ArrayIndexOutOfBoundsException异常的Log如下:java.lang.ArrayIndexOutOfBoundsException: length=5; index=5 at jxl.biff.IndexMapping.getNewIndex(IndexMapping.java:68)

yao伟斌 1万+

AISHELL-1中文语音数据集实战:从下载到训练你的第一个ASR模型(附完整代码)

本文详细介绍了如何使用AISHELL-1中文语音数据集从数据准备到训练端到端语音识别模型的全流程。AISHELL-1作为国内首个开源的普通话语音数据集,包含178小时高质量录音,适合中文自动语音识别(ASR)系统开发。文章涵盖数据下载、预处理、Conformer-CTC模型训练、评估及优化策略,并附完整代码实现。

garlic的博客 1122

STM32 USB键盘实现指南

在STM32上实现键盘功能可以通过USB HID(人机接口设备)协议来实现,使STM32设备能被计算机识别为标准键盘。通过上述步骤,您可以在STM32上实现一个功能完整的USB键盘。关键点包括:正确配置USB HID设备实现键盘矩阵扫描处理按键事件并生成HID报告优化按键响应和消抖处理添加额外功能如宏键和LED反馈这个实现可以作为基础,进一步扩展为游戏键盘、宏键盘或特殊输入设备。

suny8的专栏 975

jxl linux 数组越界,使用JXL生成Excel时发生java.lang.ArrayIndexOutOfBoundsException错误

错误信息如下:……java.lang.ArrayIndexOutOfBoundsExceptionat java.lang.System.arraycopy(Native Method)at jxl.biff.StringHelper.getBytes(StringHelper.java:127)at jxl.write.biff.WriteAccessRecord.(WriteAccessRec...

weixin_39585463的博客 512

STM32入门教程:智能汽车控制

智能汽车是近年来快速发展的领域之一,它结合了嵌入式系统、传感器和通信技术,通过智能化的控制算法和决策系统实现自主导航、避障、环境感知等功能。在这篇教程中,我们将以 STM32 微控制器为核心,通过编写代码案例来介绍智能汽车的控制原理和实现方法。步骤三:决策与执行 最后,我们根据传感器数据做出相应的决策,并执行相应的动作。案例:智能汽车的避障功能 在这个案例中,我们将实现智能汽车的避障功能。感知系统负责感知汽车周围的环境,包括障碍物的距离、车辆的角度等信息。下面我们通过一个具体的案例来演示代码的编写。

2401_85258012的博客 929

jxl linux 数组越界,解决jxl导出excel异常:java.lang.ArrayIndexOutOfBoundsException

jxl ArrayIndexOutOfBoundsException异常ArrayIndexOutOfBoundsException异常的Log如下:java.lang.ArrayIndexOutOfBoundsException: length=5; index=5at jxl.biff.IndexMapping.getNewIndex(IndexMapping.java:68)at jxl.b...

weixin_28487725的博客 862

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jxl在linux环境下报java.lang.ArrayIndexOutOfBoundsException

java.lang.ArrayIndexOutOfBoundsException Caused by: java.lang.System.arraycopy(Native Method) Caused by: jxl.biff.StringHelper.getBytes(StringHelper.java:127) Caused by: jxl.write.biff.WriteAccessReco

linminqin的专栏 4169

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java项目从win上布署到linux上报java.lang.ArrayIndexOutOfBoundsException错误

这种错误是我在浏览一篇博文上看到的,具体原因是:在linux环境UTF8下每个汉字的字节数为3位(Windows中是2位)的缘故,出现了上诉的奇异现象。  这种错误是我在浏览一篇博文上看到的,具体原因是:在linux环境UTF8下每个汉字的字节数为3位(Windows中是2位)的缘故,出现了上诉的奇异现象。  错误信息如下: ...... java.la

如风 1794

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

jxl linux 数组越界,jxl_2.6.12 读取excel时报数组越界的错误

Workbook wb = Workbook.getWorkbook(file);//报错错误信息如下:......java.lang.ArrayIndexOutOfBoundsExceptionat java.lang.System.arraycopy(Native Method)at jxl.biff.StringHelper.getBytes(StringHelper.java:189)at...

weixin_39737831的博客 244

JXL导出Excel抛java.lang.ArrayIndexOutOfBoundsException: 5

标签: jxl excel java it 分类: J2EE笔记     今天花了几个小时找一个伤脑筋的问题“JXL导出Excel抛java.lang.ArrayIndexOutOfBoundsException: 5异常”;第一次可以正常导出,第二次以后导出就抛出这个异常;     网上解决方案有很多,有说跟static有关,有说修改jxl源码,有说跟字体格式有关……     个人认为,是

xuhaihua1990的专栏 1025

JXL生成Excel时发生java.lang.ArrayIndexOutOfBoundsException错误

导出excel时,打断点在最后outWb.write()时报错,查看源码追溯到了 查了一下writeAccess属性,百度翻译了一下注释 打断点发现setting.getWriteAccess是一串很长的字符,感到很奇怪,这个导出excel是其他同事写的工具类,从来没有报过这个错,只能按照网上的操作在创建workbook时给writeaccess赋值空。 WorkbookSettin...

订书钉qq的博客 1257

朴素贝叶斯分类器原理与Python实战

朴素贝叶斯分类器是机器学习中基于贝叶斯定理的概率分类方法,特别适合高维特征场景如文本分类。其核心原理是通过计算后验概率进行预测,并假设特征条件独立以简化计算。这种生成式模型在工程实践中展现出极高的计算效率,尤其当特征维度达到数万时仍能保持实时预测能力。技术价值体现在训练速度快、内存占用小以及支持增量学习等特点。典型应用场景包括垃圾邮件过滤、新闻分类和情感分析等文本处理任务。通过Scikit-learn提供的GaussianNB、MultinomialNB和BernoulliNB三种变体,开发者可以灵活处理连

weixin_30550081的博客 485

java数组输出异常_jxl导出excel异常:java.lang.ArrayIndexOutOfBoundsException: 31 | 学步园...

jxl导出excel异常:java.lang.ArrayIndexOutOfBoundsException: 31java.lang.ArrayIndexOutOfBoundsException: 31at jxl.biff.IndexMapping.getNewIndex(IndexMapping.java:68)at jxl.biff.FormattingRecords.rationalize...

weixin_35203943的博客 381

Workbook 创建时,报错ArrayIndexOutOfBoundsException

用jxl Workbook 创建时,报错ArrayIndexOutOfBoundsException: 0 项目中使用了jxl,跑得好好的一个项目,突然在modifyExcel()方法里报错。项目代码没有动过,查看日志文件后,定位在 Workbook.createWorkbook(is)这一行代码上报错 百思不得其解,在网上百度了很久之后,发现有一个类似的demo,https://www.osch...

陌忘遇到的bug 3855

easypoi导出excel(带图片)报错java.lang.ArrayIndexOutOfBoundsException: 0或ExcelExportException: Excel导出错误

今天用springboot做表格导出时碰到一个奇葩错误,在我本地测试导出怎么测都没问题,一放到服务器上就莫名奇妙的报错,错误有一下两部分: cn.afterturn.easypoi.exception.excel.ExcelExportException: Excel导出错误 at cn.afterturn.easypoi.excel.export.base.BaseExportServic...

z132411的博客 5783
上一篇: maven-jetty-plugin保存文件报错:请求的操作无法在使用用户映射区域打开的文件上执行
下一篇: IDEA Properties中文unicode转码问题
zljjava
博客等级 码龄15年 155粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值