【问题标题】:Conversion from type Range to Double is not valid从 Range 类型到 Double 类型的转换无效
【发布时间】:2019-08-20 11:41:40
【问题描述】:

我正在尝试将一些数据从 excel 传输到 VB 中的数组,以便以后可以在我的代码中使用。我已经导入了办公室互操作并定义了要打开的 excel 工作簿和要激活的正确工作表。但是,一旦我遍历循环,就会收到错误“System.InvalidCastException:'从类型'Range'到类型'Double'的转换无效。'”

有没有人熟悉这个并指出我正确的方向是什么?

    Dim OSpointsX(8) As Double
    Dim OSpointsY(8) As Double

    Dim MyExcel As New Excel.Application
    MyExcel.Workbooks.Open("...\Dims Update sheet 3D.xlsx")

    'extract
    MyExcel.Sheets("Sheet2").activate()

    For i = 0 To 8
        OSpointsX(i) = MyExcel.Cells(i + 3, 1)
        OSpointsY(i) = MyExcel.Cells(i + 3, 2)
    Next i

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    在 VB.NET 中,默认属性必须有参数。 ValueRange 的无参数 default property,不像在 VBA 中那样符合条件。

    明确指定Value

    OSpointsX(i) = MyExcel.Cells(i + 3, 1).Value
    OSpointsY(i) = MyExcel.Cells(i + 3, 2).Value
    

    【讨论】:

    • 查看所有复杂的问题并尝试诸如 CType 之类的命令让我毛骨悚然......谁知道它是如此简单......
    • 有两个项目供您考虑。 1) Range.Value 不是无参数的。 2)Range 的默认属性是_Default([rowIndex],[colIndex]) 属性(隐藏在VBA 中,使用对象资源管理器中的显示隐藏属性)。要在 VB.Net 中使用它来返回值,请省略索引属性。即MyExcel.Cells(i + 3, 1)()。如果您在 VB.Net 中提供索引,它将返回一个 Range 对象`。请注意,我不提倡使用默认属性。
    • @TnTinMn 是的,you are correct。我可能过于简单化了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 2011-07-30
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多