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我没有意识到,我总是听说从不这样做。所以我认为这与错误有关。