繁体   English   中英

互操作:无法调用 get_Range,也无法使用 Range().Value2 返回的二维 object 数组?

[英]Interop: Cannot call get_Range, and cannot use two-dimensional object array returned by Range().Value2?

尝试通过逐行引用替换 Cells(RowIndex,ColumnIndex).Value() 调用以提高性能,我在引用结果时永久失败。

Excel Interop - Efficiency and performance开始,其中包含使用get_range的技巧,即

//get values
object[,] objectArray = shtName.get_Range("A1:Z100").Value2;
iFace = Convert.ToInt32(objectArray[1,1]);

//set values
object[,] objectArray = new object[3,1] {{"A"}{"B"}{"C"}};
rngName.Value2 = objectArray;

我想我不能使用get_Range因为该方法对我来说是不可调用的,VB 在运行时说(不是可见成员)。

现在我想出了类似的东西:

Dim Values As Object(,)
Values = Sheet.Range(Sheet.Cells(RowIndex, 1), Sheet.Cells(2, 17)).Value2
For Index As Integer = 0 To 16
  MsgBox(Values(0, Index))
Next

但是,使用二维索引引用Values总是返回“索引超出数组范围”异常。 使用调试器检查数组显示了一个不错的二维数组,该数组在第二维上应该有 17 个元素,因此Value (0,0)确实应该是一个有效的参考——但它不是:

调试器让我检查 Value,我还可以深入到Value(0,0)并查看正确的值,但仅重新评估该元素,即检查“ Value (0,0) ”返回上述消息。

如何引用我的 Value2 调用返回的内容?

也许是这样的? 请注意,如果您希望数组将列作为第一个元素,请按照说明更改以下行:

Imports Microsoft.Office.Interop
    Module Module1
        Sub main()
            Dim appExcel As Excel.Application
            Dim wb As Excel.Workbook
            Dim ws As Excel.Worksheet
            Dim values As Object

            appExcel = GetObject(, "Excel.Application")
            wb = appExcel.Workbooks(1)
            ws = wb.Worksheets(1)
            With ws
                values = .Range(.Cells(1, 1), .Cells(2, 5)).Value2
                'if column is first element use appExcel.Worksheetfunction.Transpose(.Range(.Cells(1, 1), .Cells(2, 5)).Value2)
                For i As Int32 = LBound(values, 1) To UBound(values, 1)
                    For j As Int32 = LBound(values, 2) To UBound(values, 2)
                        System.Windows.Forms.MessageBox.Show(values(i, j))
                    Next j
                Next
            End With
        End Sub
    End Module

尝试

Dim Values As Variant
Dim shtName as Worksheet
Set shtName = <your sheet>
Values = shtName.Range("A1:Z100")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM