2015-05-13 4 views
0

Я зацикливаюсь через некоторые ячейки excel, чтобы суммировать значения ячеек, некоторые из ячеек пустые, и я получаю ошибку Input string was not in the correct format, когда я их передаю. Вот мой код:Добавление значений с int.parse

 int total = 0; 
     int rowstart = 4; 
     while (ws.Cells[rowstart, 1].Value.ToString() != "") 
     { 
      if (ws.Cells[rowstart, 1].Value.ToString() != 
         ws.Cells[rowstart + 1, 1].Value.ToString()) 
      { 
       ws.InsertRow(rowstart + 1, 1); 
       ws.Cells[rowstart + 1, 3].Value = total; 
      } 
      else 
      { 
     total = total + int.Parse(ws.Cells[rowstart, 3].Value.ToString()); 
// I'm adding the value of Column 3 to the variable total, 
I get the error if the cell is empty 
       rowstart = rowstart + 1; 
      } 
     } 

Я думал, что это потому, что вы не можете разобрать пустую строку, так как я просто добавить 0, если ячейка пуста?

+0

Можете ли вы представить, какой тип 'ws.Cells [rowstart, 3] .Value' это? – Kamo

+0

@Kamo Что вы подразумеваете под типами? значения в ячейках являются целыми числами или пустыми ячейками. У меня возникают проблемы с добавлением, если цикл проходит через пустую ячейку. – crimson

+0

Вы хотите добавить '0' ** только **, если ваша ячейка пуста или когда эта ячейка не содержит действительного целого? –

ответ

3

Использование int.TryParse:

int parsed; 
int.TryParse(ws.Cells[rowstart, 3].Value.ToString(), out parsed) 
total += parsed; 

parsed будет 0, если строка не является числом.

+0

Похоже, что 'int.TryParse' действительно гарантирует, что параметр' out' установлен в '0', если сбой синтаксического анализа. Тем не менее, я бы, вероятно, пошел с: 'if (int.TryParse (...)) {total + = parse; } '. – Corak

0

Использование int.TryParse вместо int.Parse

int total = 0; 
int rowstart = 4; 

while (ws.Cells[rowstart, 1].Value.ToString() != "") 
{ 
int val=0; 
if (ws.Cells[rowstart, 1].Value.ToString() != ws.Cells[rowstart + 1, 1].Value.ToString()) 
{ 
    ws.InsertRow(rowstart + 1, 1); 
    ws.Cells[rowstart + 1, 3].Value = total; 
} 
else 
{ 
int.TryParse(ws.Cells[rowstart, 3].Value.ToString(), out val); 
    total = total + val; 
    // I'm adding the value of Column 3 to the variable total, I get the error if the cell is empty 
    rowstart = rowstart + 1; 
} 

} 
+0

'TryParse' возвращает' bool', указывающий на то, что данная строка была разборной или нет. Поэтому 'val = int.TryParse (...)' не должен даже компилироваться. – Corak

+0

@Corak жаль, что это была опечатка. – Mairaj

0

Попробуйте код ниже

else 
{ 
    If (int.TryParse(ws.Cells[rowstart, 3].Value.ToString(), out result)) 
    total = total +int.Parse(ws.Cells[rowstart, 3].Value.ToString()); 

    rowstart = rowstart + 1; 
} 
Смежные вопросы