运算符“==”不能应用于 '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;
}
我在尝试与 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;
}