调用IWorkbook.SaveToStream抛出System.IndexOutOfRangeException原因咨询
可能触发该异常的原因
- 首先你现有代码本身就有隐患:
MemoryStream被using修饰后,方法执行结束就会自动释放,就算这次保存成功,调用方拿到的也是已销毁的流,后续操作必然报错,建议去掉using,由调用方负责流的释放。本次异常是在SaveToStream执行过程中抛出,暂时和这个问题无关,但要优先修正这个写法。 - SpreadsheetGear版本存在BUG:如果你用的是未激活的试用版,或者是较旧的版本,旧版本在处理特定内容时经常出现内部数组越界的问题,升级到最新正式版通常能解决这类通用BUG。
- 工作簿内容不符合规范:这是最常见的触发原因,主要包括这些情况:
- 工作簿里有损坏的公式、自定义名称引用了不存在的单元格区域
- 单元格存在特殊编码的不可见字符、或者文本长度超出了SpreadsheetGear的支持上限
- 工作表里有异常的合并单元格、损坏的图表/透视表对象、或者超出行列数限制的隐藏区域
- 工作簿是由WPS等其他非微软Excel软件生成的,格式兼容有问题,导致SpreadsheetGear保存时解析出错
- 保存格式不匹配:你传入的
SpreadsheetGearHelper.DefaultFileFormat参数和工作簿实际支持的格式不兼容,比如工作簿用到了仅xlsx格式支持的功能,但你指定的是旧版xls格式,保存时就会触发内部错误。 - 并发操作冲突:如果同一个
IWorkbook实例同时被多个线程读写,没有做锁保护,保存时工作簿的内部状态被其他线程修改,也会触发这类数组越界异常。
内容的提问来源于stack exchange,提问作者Liam
相关产品推荐
相关产品推荐

