Невозможно выполнить привязку времени выполнения по нулевой ссылке – Пустые ячейки Excel

Кажется, я не думаю о том, как исправить ошибку, упомянутую в названии, и искал некоторые идеи о том, что нужно делать.

Я пытаюсь прочитать строки таблицы Excel в объекте.

В первый раз, когда он петли, у меня нет проблем, потому что строки 1, столбец 1 и столбец 1 строки 1 имеют в них данные.

Но когда он попадает в строку 2, столбец 1 и столбец 2 строки 2, он падает с вышеупомянутой ошибкой, потому что эти ячейки в электронной таблице являются «пустыми»,

Я просто не могу решить, где я могу поместить некоторые «нулевые» проверки.

Может ли кто-нибудь предложить, как это сделать?

Вот мой код …

private static void IterateRows(Excel.Worksheet worksheet) { //Get the used Range Excel.Range usedRange = worksheet.UsedRange; // create an object to store the spreadsheet data List<SPREADSHEETModel.spreadsheetRow> spreadsheetrows = new List<SPREADSHEETModel.spreadsheetRow>(); //Iterate the rows in the used range foreach (Excel.Range row in usedRange.Rows) { for (int i = 0; i < row.Columns.Count; i++) { spreadsheetrows.Add(new SPREADSHEETModel.spreadsheetRow() { col1 = row.Cells[i + 1, 1].Value2.ToString(), col2 = row.Cells[i + 1, 2].Value2.ToString() }); } } } 

Не использовать .ToString() это приведет к null reference exception когда значение равно null. Используйте Convert.ToString() , он вернет пустую строку для нулевого значения.

 col1 = Convert.ToString(row.Cells[i + 1, 1].Value2); col2 = Convert.ToString(row.Cells[i + 1, 2].Value2); 

Вы нуждаетесь в них до вызова ToString . Может быть, вы даже можете переместиться, если перед добавлением, так как я думаю, что не полезно добавлять пустые строки, но это может быть неправильным в вашем сценарии:

 if (row.Cells[i + 1, 1].Value2 != null && row.Cells[i + 1, 2].Value2 != null) { spreadsheetrows.Add(new SPREADSHEETModel.spreadsheetRow() { col1 = row.Cells[i + 1, 1].Value2.ToString(), col2 = row.Cells[i + 1, 2].Value2.ToString() }); } 

В противном случае это, вероятно, то, что вам нужно:

 col1 = row.Cells[i + 1, 1].Value2 != null ? row.Cells[i + 1, 1].Value2.ToString() : null, 

Причина исключения заключается в том, что Value2 является dynamic , поэтому возвращаемое значение определяется во время выполнения. И если Value2 имеет значение null , он не может определить метод ToString для вызова.

Вы можете проверить внутри цикла for:

  //Iterate the rows in the used range foreach (Excel.Range row in usedRange.Rows) { for (int i = 0; i < row.Columns.Count; i++) { spreadsheetrows.Add(new SPREADSHEETModel.spreadsheetRow() { if (row.Cells[i + 1, 1].Value2 != null) { col1 = row.Cells[i + 1, 1].Value2.ToString(); } if (row.Cells[i + 1, 2].Value2 != null) { col2 = row.Cells[i + 1, 2].Value2.ToString(); } if (row.Cells[i + 1, 3].Value2 != null) { col3 = row.Cells[i + 1, 3].Value2.ToString(); } }); } } 
  • Какой механизм позволяет Excel передавать внешние сообщения пользователям?
  • Как использовать элемент управления Excel RefEdit в надстройке VSTO?
  • Ищу предложение - Excel Addin - C # Services
  • Добавление формулы в ячейку Исключение из HRESULT: 0x800A03EC
  • Как получить макросы, определенные в книге Excel
  • Установка владельца Caliburn IWindowmanager в Excel с помощью ручки HWND
  • Программно отменить команду клавиатуры в C #
  • C # Interop определяет массив рабочих листов
  • Изменение элементов управления лентой Office из других приложений в VSTO
  • Получить Hashcode для книги Excel в VSTO для включения кнопок на основе состояния
  • C # набор открытых книг
  • Interesting Posts

    Нужна помощь в функции цикла в vba для отправки нескольких сообщений электронной почты

    Оптимизация избирательных голосов в политическом симуляторе … 200 000+ возможностей, как их преодолеть?

    Функция вызова для отправки электронной почты без большого количества кода в Excel

    Если ячейка 1-10 (диапазон) содержит X, то ячейка 11 должна возвращать A или если диапазон ячеек 1-10 содержит Y, то ячейка 11 должна возвращать B

    Печать по ширине с таблицей XML в Excel

    EXCEL: ссылка на содержимое ячейки внутри LINE ()

    Вычислить выпадающие списки в Excel

    Таблицы Google (Excel): как я могу использовать множитель на основе предоставленного значения

    Interop Excel Automation – открыть книгу с учетной записью службы

    Определите номер недели, номер месяца, год с момента управления DatePicker в пользовательской форме VBA

    EPPlus Excel File Fill.PatternType, Fill.PatternColor или Fill.BackgroundColor

    Экран Excel Interop Скрыть текст области диаграммы

    Мой файл Excel CSV-данных из Google Apps Script не отражает мою таблицу Google

    Когда выбрана целая строка, почему Selection.EntireColumn.Address возвращает ссылку на строку?

    Правильный синтаксис для функции записи

    Давайте будем гением компьютера.