[英]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.