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

Operator '==' cannot be applied to operands of type 'System.DBNull' and 'Int'

我在尝试与 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);

有谁知道导致此错误的原因以及如何解决?

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

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

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

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