每个单元的数据验证,以使用EPplus检查该值是否可用

时间:2017-06-08 11:18:32

标签: c# asp.net-mvc excel epplus

我正在使用Epplus上传文件。我有两张.xlsx格式的表。我想确保每个单元格都有价值。例如在我的excel中我有下拉框。如果用户在第一张表中有详细信息并且第二张表是空的。但是这个空表只有一个值,通过使用这个下拉列表错误地添加到表中。所以在这个阶段,当它进入这个循环时它将显示对象空引用错误

    for (int rowIterator = 2; rowIterator <= noOfRow; rowIterator++)
     {

         if (int.TryParse(s.Cells[rowIterator, 1].Value.ToString(), out n) && int.TryParse(s.Cells[rowIterator, 2].Value.ToString(), out n))
        {
          Pss.Pbr = Convert.ToInt32(s.Cells[rowIterator, 1].Value);
          Pss.Amount = Convert.ToInt32(s.Cells[rowIterator, 2].Value);
         Ps.Add(Pss);

        }
}

如何验证所有列和行都有值

1 个答案:

答案 0 :(得分:2)

在循环中,检查单元格是否为空且不为空,如下所示:

bool allRangeHasValue=true;
for (int rowIterator = 2; rowIterator <= noOfRow; rowIterator++)
{
    for(int col =1;col<=s.Dimension.End.Column;col++)
    {

      if(String.IsNullOrWhiteSpace(s.Cells[rowIterator, col]?.Value?.ToString())
      {
          allRangeHasValue=false;
          break;
      }
    }
    if(!allRangeHasValue)
    {
      break;
    }
}

编辑: 根据您的评论,您可以执行以下操作: 编辑2:由于您使用的是TryParse,因此您不需要再次解析,TryParse会返回out变量中的值。

for (int rowIterator = 2; rowIterator <= noOfRow; rowIterator++)
 {
     int n1;
     int n2;
     if (!string.IsNullOrWhiteSpace(s.Cells[rowIterator, 1]?.Value?.ToString()) &&
         !string.IsNullOrWhiteSpace(s.Cells[rowIterator, 2]?.Value?.ToString()) &&
         int.TryParse(s.Cells[rowIterator, 1].Value.ToString(), out n1) && 
         int.TryParse(s.Cells[rowIterator, 2].Value.ToString(), out n2))
    {
      Pss.Pbr = n1;
      Pss.Amount = n2;
      Ps.Add(Pss);

    }
}