我似乎无法想出一种方法来纠正标题中提到的错误,并且正在寻找关于应该做些什么的一些想法。
我正在尝试将Excel电子表格的行读入对象。
第一次循环时我没有问题,因为第1行,第1列和第1行第2列都包含数据。
但当它到达第2行,第1列和第2列第2列时,它会因上述错误而失败,因为电子表格中的那些单元格为"为空"
我无法解决我可以放置的问题"如果为null"检查。
有人可以建议怎么做吗?
这是我的代码......
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()
});
}
}
}
答案 0 :(得分:25)
当值为null时,不要使用.ToString()
会导致null reference exception
。
使用Convert.ToString()
,它将为空值返回空字符串。
col1 = Convert.ToString(row.Cells[i + 1, 1].Value2);
col2 = Convert.ToString(row.Cells[i + 1, 2].Value2);
答案 1 :(得分:3)
在致电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
方法。
答案 2 :(得分:0)
你可以在里面查看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();
}
});
}
}