当前位置: 代码迷 >> VB Dotnet >> Visual Basic.NET 摘引Excel的Range的数组的下限值冲突
  详细解决方案

Visual Basic.NET 摘引Excel的Range的数组的下限值冲突

热度:102   发布时间:2016-04-25 02:10:47.0
Visual Basic.NET 引用Excel的Range的数组的下限值冲突

Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel
Module Module1
    Sub main()
        Const fsiFilePath = "C:\测试.xlsx"
        Const ExportedRange As String = "B9:B17"
        Dim ExcelApp As Excel.Application
        ExcelApp = CreateObject("Excel.Application")
        ExcelApp.Visible = True
        Dim iWkbk As Excel.Workbook
        iWkbk = ExcelApp.Workbooks.Open(fsiFilePath, , True)
        Dim Wksht As Worksheet
        Wksht = iWkbk.Worksheets(1)
        Dim DataInRange(,) As Object
        DataInRange = Wksht.Range(ExportedRange).Value   
        '从下图中可以看出来,DataInRange是从(0,0)到(8,0)的数组。
        Debug.Print(LBound(DataInRange))    '返回值为1
        Debug.Print(UBound(DataInRange))    '返回值为9
        Dim a1 As Single = DataInRange(1, 1)   '返回局部列表中(0,0)位置的值
        Dim a2 = DataInRange(0, 0)           '报错:索引超出了数组界限

        iWkbk.Close()
        ExcelApp.Quit()
    End Sub
End Module


为什么索引DataInRange的下限值是(1,1) ?!!!
------解决思路----------------------
excel表从1开始
------解决思路----------------------
您的错误在于下面代码中我以提示,请仔细看看。您对多维数组有些认识错误的。
Dim a1 As Single = DataInRange(1, 0)  应该这样改。


Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel
Module Module1
    Sub main()
       
        Const fsiFilePath = "C:\测试.xlsx"
        Const ExportedRange As String = "B9:B17"
        Dim ExcelApp As Excel.Application
        ExcelApp = CreateObject("Excel.Application")
        ExcelApp.Visible = True
        Dim iWkbk As Excel.Workbook
        iWkbk = ExcelApp.Workbooks.Open(fsiFilePath, , True)
        Dim Wksht As Worksheet
        Wksht = iWkbk.Worksheets(1)
        Dim DataInRange(,) As Object
        '<span style="color: rgb(255, 0, 255);">  DataInRange = Wksht.Range(ExportedRange).Value</span>   
        '从下图中可以看出来,DataInRange是从(0,0)到(8,0)的数组。
        '<span style="color: rgb(255, 0, 0);">   Debug.Print(LBound(DataInRange)) </span>   '返回值为1
        Debug.Print(UBound(DataInRange))    '返回值为9
        ' Dim a1 As Single = DataInRange(1, 1)   '返回局部列表中(0,0)位置的值
        '==========================================
        Dim a1 As Single = DataInRange(1, 0)    '按数据情况必须这样改

        'DataInRange中的数组总长度为1,维度为9的。
        '检索数据从0开始的,但是此DataInRange的数组长度没有索引值1
        '==================================
        Dim a2 = DataInRange(0, 0)           '报错:索引超出了数组界限</span>
        iWkbk.Close()
        ExcelApp.Quit()
    End Sub

End Module

------解决思路----------------------
索引DataInRange的最大索引值是8和0
------解决思路----------------------
索引DataInRange的最大索引值是9和0 
------解决思路----------------------
 LBound(DataInRange)    '返回值为1
 UBound(DataInRange)   '返回值为9
以前的版本的解释是如果转化为检索索引值时必须减一。
 LBound(DataInRange) -1   '返回值为1
  相关解决方案