Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#ArgumentOutofRange阅读Excel工作表时出现异常_C#_Excel_Outofrangeexception - Fatal编程技术网

C#ArgumentOutofRange阅读Excel工作表时出现异常

C#ArgumentOutofRange阅读Excel工作表时出现异常,c#,excel,outofrangeexception,C#,Excel,Outofrangeexception,我正在阅读OfficeOpenXml.excel工作表,并在集合的中间获取ArgumentOufOfRangeException 我是这样读的process.Information=sheet.Cells[line,I++].Text。在这一行i=22,而sheet.Dimension.Column=28。 在调试和枚举集合时,我看到方法.Text抛出异常,而.Value方法显示正确的值 根据异常堆栈跟踪,异常由 System.Text.StringBuilder.Insert()方法

我正在阅读OfficeOpenXml.excel工作表,并在集合的中间获取ArgumentOufOfRangeException

我是这样读的
process.Information=sheet.Cells[line,I++].Text。在这一行
i=22
,而
sheet.Dimension.Column=28

在调试和枚举集合时,我看到方法
.Text
抛出异常,而
.Value
方法显示正确的值

根据异常堆栈跟踪,异常由 System.Text.StringBuilder.Insert()方法

----编辑---- 在得到公认的答案后,我意识到问题不仅仅在于阅读。我用一个额外的列(导入成功或不成功)回复同一个文件,并且在执行工作表格式化时,我再次收到相同的错误,所有这些都是由于方法System.Text.StringBuilder.Insert()。我正在尝试自动调整列
sheet.column(22).AutoFit()
这是堆栈跟踪

at System.Text.StringBuilder.Insert(Int32 index, Char* value, Int32 valueCount)
at System.Text.StringBuilder.Insert(Int32 index, Char value)
at OfficeOpenXml.Style.XmlAccess.ExcelNumberFormatXml.ExcelFormatTranslator.ToNetFormat(String ExcelFormat, Boolean forColWidth)
at OfficeOpenXml.Style.XmlAccess.ExcelNumberFormatXml.ExcelFormatTranslator..ctor(String format, Int32 numFmtID)
at OfficeOpenXml.Style.XmlAccess.ExcelNumberFormatXml.get_FormatTranslator()
at OfficeOpenXml.ExcelRangeBase.GetFormattedText(Boolean forWidthCalc)
at OfficeOpenXml.ExcelRangeBase.get_TextForWidth()
at OfficeOpenXml.ExcelRangeBase.AutoFitColumns(Double MinimumWidth, Double MaximumWidth)
at OfficeOpenXml.ExcelRangeBase.AutoFitColumns(Double MinimumWidth)
at OfficeOpenXml.ExcelRangeBase.AutoFitColumns()
at OfficeOpenXml.ExcelColumn.AutoFit()
at SkiptraceAPI.Models.ProcessosRepository.formatExcel(ExcelPackage package, Boolean addValidation) in

从堆栈跟踪中提到
Style.xmlacess
的部分判断,您似乎在
OfficeOpenXml
的实现中遇到了一个真正的bug,该bug是由相关单元格的样式触发的

由于使用
Value.ToString()
在单元格不为
null
时适用,因此可以通过使用新添加的null条件语法来解决此错误:

另一种可能的解决方法是使用
GetValue

process.Information=sheet.GetValue(行,i++);

编辑:第22列中的单元格中似乎有一个样式具有非数字值,而库需要一个数字字符串。库尝试分析字符串中的数字,导致异常。您可以通过更改单元格的格式来解决此问题,但实际的解决方法是修改库以检测格式不匹配,而不引发异常。

这看起来像是与处理单元格样式相关的实现中的错误。请改为尝试
process.Information=sheet.GetValue(line,i++)
。读取Value属性会有什么问题?您确实需要
.Text
属性吗?我在谷歌上搜索了一些例子,我发现
Value
经常被使用,而不是
Text
。找不到您正在使用的软件包的文档,但是
Text
是否有特殊属性?实际上,我不知道使用
.Value
而不是
.Text
是否有问题。这是旧代码,不记得为什么选择这种方式(但这一定是一个原因)。此代码始终有效,客户第一次报告此错误。我想我会改为
.Value
,但我只是想了解问题……在进行实验时,我认为我的选择是基于空/空单元格。使用
.Text
我不需要在使用
.Value
时验证单元格内容(如果为null,
.Text
将返回null),因为它返回一个
对象
,我必须执行
.Value.ToString()
,如果值为null,则会引发异常是,我将
.Text
替换为
GetValue
(如您所建议的),但现在我在使用
sheet.Column(22.AutoFit()
)时再次面临异常。。。有什么想法吗?@ NunoRibeiro第22栏中的一个值的样式一定有问题,因为在该样式中存储的任何内容似乎都会在实现中发现多个bug。@ NunoRibeiro,如果您可以自由修改该电子表格,请考虑将其内容复制到没有新样式的内容中,并查看是否可以打开/自动调整生成的电子表格中的列。我将内容(没有样式)复制到另一个电子表格中,错误消失了。但这不是一个解决方案,因为客户机创建了自己的spreadcheats。。。必须理解为什么会发生这种情况,以及我能做些什么来防止它…@NunoRibeiro不幸的是,这需要访问电子表格本身:看起来单元格中有一个样式具有非数字值,而库需要一个数字字符串。
process.Information = sheet.Cells[line, i++].Value?.ToString();
//                                                ^
process.Information = sheet.GetValue<string>(line, i++);