阅读ExcelWorksheet

时间:2016-07-06 10:38:28

标签: c# excel outofrangeexception

我正在阅读OfficeOpenXml.ExcelWorksheet并在Collection的中间获取ArgumentOufOfRangeException。

我正在读这个process.Information = sheet.Cells[line, i++].Text;。这一行i = 22同时sheet.Dimension.Column = 28sheet #columns

i value 当我正在调试和枚举集合时,我发现当.Text方法显示正确的值时,方法.Value上会抛出异常。

collection enumerated

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

trace

----编辑---- 在接受的答案之后,我意识到问题不仅在于阅读。我使用额外的列(导入成功或不成功)回复相同的文件,当我正在进行表格格式化时,我再次得到相同的错误,所有这些都归因于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

1 个答案:

答案 0 :(得分:2)

从提及Style.XmlAccess的堆栈跟踪部分来看,看起来您遇到了由相关单元格样式触发的OfficeOpenXml实现中的真正错误。

由于在单元格不是Value.ToString()时使用null可以为您工作,因此您可以使用新添加的 null条件语法来解决此问题:

process.Information = sheet.Cells[line, i++].Value?.ToString();
//                                                ^

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

process.Information = sheet.GetValue<string>(line, i++);

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