0

(在 VS 2017 上工作)

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

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

我得到这个结果: 链接到图片

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

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

我不想要标题(第一行的“纬度”),所以我更改了 offset() 以仅使用以下代码获取数据:

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

当我有超过 1 行数据(范围大于 2 行)时,我工作得很好,但在前一张图像上显示的情况下,(2 行范围,1 个数据单元格),我收到此错误:

快速观看

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

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

对象(字符串)不是数组?

有一行代码适用于所有情况吗?或者我需要创建一个函数来检查范围的长度以将其转换为对象(,)?

4

1 回答 1

0

显然,当单个单元格留在范围内时,它不能转换为对象数组。

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

如果您在所有情况下都想要一个数组,请在调用之前检查范围内的单元格数量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
于 2018-08-29T15:32:46.003 回答