2016-07-06 3 views
5

Я читаю OfficeOpenXml.ExcelWorksheet и получаю исключение ArgumentOufOfRangeException в середине коллекции.C# ArgumentOutOfRangeException при чтении ExcelWorksheet

Я читаю вот так process.Information = sheet.Cells[line, i++].Text;. В этой строке i = 22 пока sheet.Dimension.Column = 28. sheet #columns

i value Когда я отладка и перечислить коллекцию, я вижу, что исключение по методе .Text в то время как метод .Value показывает правильное значение.

collection enumerated

Согласно трассировки стека исключений, исключение бросают методом

trace

---- EDIT System.Text.StringBuilder.Insert() - - После принятого ответа я понял, что проблема заключается не только в чтении. Я отвечу тому же файлу с дополнительным столбцом (успех импорта или insuccess), и пока я делаю форматирование листа, я получаю снова ту же ошибку, все из-за метода 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

Это похоже на ошибку в реализации, связанную с обработкой стиля вашей ячейки. Попробуйте 'process.Information = sheet.GetValue (строка, i ++)' вместо этого. – dasblinkenlight

+0

В чем проблема с чтением свойства Value? Вам действительно нужно свойство '.Text'? Для некоторых примеров у меня есть googled, и я вижу, что 'Value' используется намного больше, чем' Text'. Вы не можете найти документацию для используемого вами пакета, но не 'Text' какое-то специальное свойство? –

+0

На самом деле я не знаю, есть ли проблема с использованием '.Value' вместо' .Text'. Это старый код и не может вспомнить, почему вы выбираете этот способ (но, возможно, это была причина). Этот код всегда работал, и клиент сообщал об этой ошибке в первый раз. Я предполагаю, что я изменю его на «.Value» вместо этого, но просто хочу понять проблему ... – NunoRibeiro

ответ

2

Судя по части трассировки стека упоминая Style.XmlAccess, похоже, что вы столкнулись с подлинной ошибкой в ​​реализации OfficeOpenXml вызванного стилем соответствующей клетке.

С помощью Value.ToString() работает для вас, когда клетка не null, вы можете обойти эту ошибку, используя недавно добавленный нулевой условный синтаксис:

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

Другим возможным обходным использует GetValue<T>:

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

Edit: похоже, есть стиль в ячейке в колонке 22-й который имеет нечисловое значение, где библиотека ожидает числовую строку. Библиотека пытается проанализировать строку для числа, вызывая исключение. Вы можете обойти это, изменив формат ячейки, но фактическое исправление заключается в том, чтобы изменить библиотеку, чтобы обнаружить несоответствия формата, не выбрасывая исключение.

+0

Да, я заменяю '. Text' by 'GetValue ' (как вам было предложено), но теперь я снова сталкиваюсь с исключением при использовании 'sheet.Column (22) .AutoFit()' ... любых мыслей? – NunoRibeiro

+0

@NunoRibeiro. В столбце 22 должно быть что-то неправильно со стилем одного значения, потому что все, что хранится там для стиля, похоже, обнаруживает несколько ошибок в реализации. – dasblinkenlight

+0

@NunoRibeiro Если вы можете свободно модифицировать эту электронную таблицу, подумайте о том, чтобы скопировать ее содержимое без стиля в новый, и посмотреть, можете ли вы открыть/автоподписать столбцы в полученной таблице. – dasblinkenlight

Смежные вопросы