2016-03-29 2 views
2

Я читаю файл excel, и содержимое затем сохраняется в БД. Проблема заключается в проверке пространства в столбце Excel. Некоторые из столбцов являются пробелами, и для них значения DB будут равны нулю. У меня есть проверка на наличие нулевого значения при чтении ячеек, но почему-то она не работает должным образом.Проверка пробела ячейки Excel в C#

Код

if (workSheet.Cells[rowIterator, 12].Value != null) 
store.WeeklyOff = workSheet.Cells[rowIterator, 12].Value.ToString(); 
if (workSheet.Cells[rowIterator, 13].Value != null) 
store.OpenTime = workSheet.Cells[rowIterator, 13].Value.ToString(); 
if (workSheet.Cells[rowIterator, 14].Value != null) 
store.CloseTime = workSheet.Cells[rowIterator, 14].Value.ToString(); 

В приведенном выше фрагменте кода я поставил нулевой чек значение для каждой ячейки. Проблема состоит в том, что столбец 12 также является пробелом, и эта проверка работает нормально, то есть if условие является ложным, и оно перемещается в следующий оператор, но из столбца 13 и далее нулевая проверка не работает. Во время отладки я могу видеть null для столбца 13 & 14, все еще != null проверка не проверяется, и код в операторе if выполняется, и я получаю исключение из null-указателя. Я пробовал много других вещей для нулевой проверки, но ничего не работает должным образом. Борьба с последнего 1 дня, но ничего не работает. Все переменные определены как String. Пожалуйста, порекомендуйте.

+0

Weird вопрос: если вы только чтение данных из таблицы, почему вы не используете OLEDB? – maniak1982

+0

Также вы столкнулись с проблемой, если в этом индексе нет значения «Cell». Вам нужно будет выполнить нулевую проверку: 'if (workheet.Cells [rowIterator, 12]! = Null)' – maniak1982

+0

Спасибо за ввод. Но поскольку я делаю это в первый раз, я искал некоторые уроки и делал то, что понял. Посмотрите на Oledb и попробуйте, как было предложено. В любом случае я попытался, как было сказано выше, удалять. Знать, но все равно. Он все еще выполняет условие внутри If, и я получаю исключение из null-указателя. – Gaurav

ответ

0

Попробуйте следующее:

var x = string.IsNullOrEmpty(workSheet.Cells[rowIterator, 13].Value; 
if(value != null) 
{ 
    store.OpenTime = workSheet.Cells[rowIterator, 13].Value.ToString(); 
} 

или

Type t = workSheet.Cells[rowIterator, 13].value.GetType(); 
if (t.Equals(typeof(string))) 
{ 
    var x = string.IsNullOrEmpty(workSheet.Cells[rowIterator, 13].Value; 
    if(value != null) 
    { 
     store.OpenTime = workSheet.Cells[rowIterator, 13].Value.ToString(); 
    } 
} 
+0

Спасибо Eminem. Но я уже пробовал это. Используя выше, он снова выдает исключение null-указателя как workSheet.Cells [rowIterator, 13] .Value.ToString() имеет значение NULL. Итак, на этот раз исключение null-указателя выбрано в условии If. – Gaurav

+0

Как насчет назначения значения ранее. См. Измененный ответ – Eminem

+0

. Затем используйте блоки try и catch и внутри catch (NullReferenceException), присваивающие значения, которые вы хотите, могут быть пустой строкой для таких мест. –

0
try 
    { 
     if(!string.IsNullOrEmpty(workSheet.Cells[rowIterator, 13].Value.ToString())) 
     { 
      store.OpenTime = workSheet.Cells[rowIterator, 13].Value.ToString(); 
     } 
    } 
    catch(NullReferenceException) 
    { 
     store.OpenTime = SomeValue; 
    } 
+0

Спасибо.Кажется, это работает, но после 3-4 строк, снова получив Null Reference Exception. Также не уверен, что использование try/catch для 23 столбцов и 2500 строк будет хорошей ставкой. Я понимаю, что попытка/улов дорого и должна использоваться в качестве последнего средства. – Gaurav

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