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")
- C#interop.excel workbooks.opentext方法fieldinfo不起作用
- 使用Microsoft.Office.Interop.Excel从Excel中读取文本格式
- 不要让excel打开文件,如果它已经打开
- Windows 7 .net Excel .SaveAs()错误exception来自HRESULT:0x800A03EC
- 如何从XLSX(Excel)读取?
- 使用OleDbConnection检索带有特殊字符的Excel工作表名称
- VB.Net – Excel COM对象没有得到释放
- 优化C#方法,比较和创build差异Excel文件
- 从Excel中读取数据到app.config