无法对空引用执行运行时绑定 - 清空Excel单元格

时间:2015-01-30 11:41:30

标签: c# .net excel vsto

我似乎无法想出一种方法来纠正标题中提到的错误,并且正在寻找关于应该做些什么的一些想法。

我正在尝试将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()
                });
            }
        }
    }

3 个答案:

答案 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,

异常背后的原因是Value2dynamic,因此返回值是在运行时确定的。如果Value2null,则无法确定要调用的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();
        }
            });
        }
    }