Interop:无法调用get_Range,也不能使用Range()返回的二维对象数组。

试图通过逐行引用来replace单元格(RowIndex,ColumnIndex).Value()调用的性能,我永远无法引用结果。

从Excel Interop开始- 效率和性能 ,其中包含使用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始终会返回“索引超出数组范围”exception。 使用debugging器检查数组显示一个很好的二维数组,它应该在第二维上有17个元素,所以Value (0,0)应该是一个有效的引用 – 但它不是:

debugging器让我检查价值,我也可以深入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")