检索单元格值时如何避免类型转换错误?

时间:2015-07-06 02:02:10

标签: vb.net excel

我使用Vb.net 2013 excel。我需要从工作簿单元格中获取.range("An")值。

如何在不事先知道数据类型的情况下检索单元格值时如何避免类型转换错误?

在获取单元格值之前,如何确定数据类型decimal,integer,date,string等?

使用.Cell(1,1).Text并没有给我我需要的价值。

我已经看到vba6用户通过Variant Type解决了这个问题的一些讨论,但vb.net不支持。

我只需要单独的单元格,因此Sheet.Arrays可能不是答案。

任何建议表示赞赏,谢谢!

1 个答案:

答案 0 :(得分:0)

当数据有任何形状和形式时,您需要检查其类型并查看是否可以将其转换为所需类型。我假设您正在使用Excel.Interop。将您的值声明为Object并对其进行测试,然后尝试将其转换为

例如

' Get single cell value
Dim val as Object = DirectCast(range.Cells[row, col], Excel.Range).Value2
' Test for datatypes
If TypeOf val Is Integer Then
    Dim i As Integer = CInt(val)
Else If TypeOf val Is Double Then
    ....
    ....
    ' check all datatypes here
End If

如果您尝试转换,而不检查类型,您肯定会遇到转换异常,如果您尝试通过字符串进行如下

' Get string    
 Dim val as String = DirecCast(range.Cells[row, col], Excel.Range).Value2.ToString()
 Dim i as Integer
 Dim done as Boolean
 If Not done AndAlso Integer.TryParse(val, i) Then
     ' Do something with "i"
     done = true
 End if
 ' check for other types in similar fashion but order so that types with decimals come after integers

在这种情况下,您可能遇到一种类型被另一种类型占用的条件。