C#无法将System.DBNull类型隐式转换为字符串

C#无法将System.DBNull类型隐式转换为字符串,c#,excel,C#,Excel,需要一点帮助,我正试图从工作表中提取数据,我得到了上面的错误。它发生在字符串文本行上。我可以做什么来转换或忽略空值 var excel = new Microsoft.Office.Interop.Excel.Application(); Workbook workbook = excel.Workbooks.Open(@"C:\Documents\ANIs.xlsx"); Worksheet worksheet = workbook.Worksheets[1];

需要一点帮助,我正试图从工作表中提取数据,我得到了上面的错误。它发生在字符串文本行上。我可以做什么来转换或忽略空值

     var excel = new Microsoft.Office.Interop.Excel.Application();
     Workbook workbook =  excel.Workbooks.Open(@"C:\Documents\ANIs.xlsx");
     Worksheet worksheet = workbook.Worksheets[1];

        Range a1 = worksheet.get_Range("A1","B2");

        object rawValue = a1.Value;
        string Text = a1.Text; //<--Error Occurs here. 

        for (int i = 0; i < a1.Count; i++)
        {
            if (a1.Text != null)
                Console.WriteLine("{1}", rawValue, Text);
        }
        Console.ReadLine();
    }
var excel=new Microsoft.Office.Interop.excel.Application();
工作簿=excel.Workbooks.Open(@“C:\Documents\ANIs.xlsx”);
工作表=工作簿。工作表[1];
范围a1=工作表。获取范围(“a1”、“B2”);
对象原始值=a1.值;

字符串Text=a1.Text// 基本上,您需要一个条件语句。如果对某些类型调用
ToString()
,如果它是
Null
,它将抛出异常。最简单的补救办法是:

if(!(a1 is DBNull))
{
     // Do Something
}
希望这能澄清一点

// Sample:
var range = worksheet.get_Range("A1","B2");
if(!(range is DBNull))
{
     object raw = range.Value;
     string text = range.Text;

     // Loop here
}

另外,您不需要将
文本
用作大写,这是预定义的,不能用作变量。代码中的另一个错误。请注意,在评论中,@RonBeyer对正在使用的
文本所说的。

在转换之前,您必须检查值:
如果(a为DbNull).
我应该将其放在错误行之前还是更改错误行?很抱歉,我不明白它适用于何处。您的代码将仅显示为输出a1.Text 4次-在循环中,您需要类似于a1.Cells[I].Text的内容。还要注意的是,单元格不是数组,而是一个使用1作为起始偏移量而不是0的属性。可以更具体一些吗?它在说什么?如果(!(a1是DBNull))抛出一个错误,“给定的表达式从来不是提供的'system.DBNull'类型。实际上,您可以使用
Text
作为变量,它就需要您在表单属性前面加前缀(假设代码在表单或控件中)使用
this.Text
。这不是一个错误,只是不可取。@RonBeyer我没有意识到,我总是听说从不这样做。所以我认为这与错误有关。