读取 ExcelWorksheet 时出现 C# ArgumentOutOfRangeException

C# ArgumentOutOfRangeException while reading ExcelWorksheet

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

我正在这样阅读process.Information = sheet.Cells[line, i++].Text;。在这条线上i = 22而在sheet.Dimension.Column = 28

当我调试和枚举集合时,我看到在 .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

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

由于当单元格不是 null 时使用 Value.ToString() 对您有效,您可以使用新添加的 null 条件 语法解决该错误:

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

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

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

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