无法将“ System.String”转换为“ System.Object [,]”

时间:2018-08-29 14:55:06

标签: excel vb.net

(在VS 2017上工作)

我有一个引用2个(或更多)单元格的excel列的范围。 为了获取他的数据,我使用以下代码将其转换为Object(,):

somevar = CType(ExcelWorksheet.Range(CeldaLat.Offset(0, 0), LastCell).Value2, Object(,))

我得到以下结果: Link to image

请注意,我得到了一个带有标题的列和一个带有数据的单元格。 CeldaLat 引用范围的第一个单元格, LastCell 引用数据的最后一个单元格。

LastCell = CeldaLat.End(Excel.XlDirection.xlDown)

我不希望标题(第一行上为“经纬度”),因此我更改了offset()以仅获得具有以下代码的数据:

somevar = CType(ExcelWorksheet.Range(CeldaLat.Offset(1, 0), LastCell).Value2, Object(,))

当我有多于1行的数据(范围大于2行)时,我工作得很好,但是在前一张图像中所示的情况下(2行的范围,有1个数据单元),我得到了这个错误:

quick watch

错误是“无法将“ System.String”转换为“ System.Object [,]” error

显然,当单个单元格留在范围内时,无法将其转换为对象数组 Object(,),(因为不是数组?)

object(string) is not an array?

只有一行代码适用于所有情况?还是我需要做一个检查范围长度的函数,将其转换为object(,)?

1 个答案:

答案 0 :(得分:0)

  

显然,当单个单元格留在范围内时,无法将其转换为对象数组。

正确。单个单元格的Value是单个值,多个单元格范围的Value是2D数组。

如果在所有情况下都需要数组,请在调用Value之前检查范围内的单元格数目,或者调用Value并查看它是否为数组-您需要为此要记住,一切都是Object

Dim somevar As Object = ExcelWorksheet.Range(CeldaLat.Offset(0, 0), LastCell).Value2
Dim result As Object(,)

If IsArray(somevar) Then
    result = DirectCast(somevar, Object(,))
Else
    result = New Object(,) {{somevar}}
End If