运算符'=='不能应用于'System.DBNull'和'Int'类型的操作数

时间:2015-07-23 09:33:45

标签: c# error-handling excel-interop

尝试与Excel文档建立连接时,我收到此错误,以更改没有填充的所有行的颜色。

我已阅读错误日志,并指出我的错误位于以下代码部分:

try
{
    foreach (Excel.Range row in rows)
    {
        if (row.Cells.EntireRow.Interior.ColorIndex == -4142) //error is Here
        {
            row.Interior.Color = System.Drawing.Color.Red;
        }
    }
    workbook.Save();
    workbook.Close();
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(worksheet);
Marshal.ReleaseComObject(application);

是否有人知道导致此错误的原因,如果有,如何解决?

2 个答案:

答案 0 :(得分:4)

那是因为对象的数据类型是System.DBNull。您应检查对象值类型并采取相应措施:

object objValue = row.Cells.EntireRow.Interior.ColorIndex;
if(objValue is System.DBNull) {
    // 
} else {
    // 
}

答案 1 :(得分:1)

如果认为最简单的解决方法是仅使用Equals。因为它可以比较任何类型的对象。

if (row.Cells.EntireRow.Interior.ColorIndex.Equals(-4142))
{
   row.Interior.Color = System.Drawing.Color.Red;
}