我正在阅读一个 OfficeOpenXml.ExcelWorksheet 并在集合中间收到 ArgumentOufOfRangeException 异常。
我这样读取:
当我调试并枚举集合时,我发现异常是在方法
我这样读取:
process.Information = sheet.Cells[line, i++].Text;
。在这一行上,i=22
,而 sheet.Dimension.Column = 28
。
![sheet #columns](https://istack.dev59.com/gQlKY.webp)
![i value](https://istack.dev59.com/87cEv.webp)
.Text
上抛出的,而 .Value
方法显示了正确的值。
根据异常堆栈跟踪,异常是由 System.Text.StringBuilder.Insert() 方法引发的。
---- 编辑 ----
在接受答案后,我意识到问题不仅仅出现在读取数据上。我用一个额外的列(导入成功或失败)重新回复了同样的文件,当我进行 sheet 格式化时,我再次遇到了相同的错误,所有这些都是由 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
process.Information = sheet.GetValue<string>(line, i++)
。 - Sergey KalinichenkoValue
属性会有什么问题?你是否实际上需要.Text
属性?我在谷歌上搜索了一些示例,发现很多人使用Value
而不是Text
。我找不到你正在使用的包的文档,但Text
不是一种特殊属性吗? - Sander Aernouts.Value
而不是.Text
是否有问题。这是旧代码,记不起为什么选择了这种方式(但一定有原因)。这段代码以前一直运行正常,客户第一次报告出现了这个错误。我猜我会改成使用.Value
,但只是想弄清楚问题所在... - NunoRibeiro.Text
,我不需要验证单元格内容(如果为空,则.Text
将返回null),而使用.Value
,因为它返回一个object
,我必须执行.Value.ToString()
,如果值为空则会抛出异常。 - NunoRibeiro