我正在使用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);
}
}
如何验证所有列和行都有值
答案 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);
}
}