6

谁能告诉我如何在 Visual Basic 6.0 中读取 Excel 文件并将所有值导入到列表视图或数据网格视图中,想要使用一种简单有效的技术来实现这一点。谁能帮我解决这个问题

4

2 回答 2

8

这应该将数据从 Excel 文件导入 ListView:

    Dim ExcelObj As Object
    Dim ExcelBook As Object
    Dim ExcelSheet As Object
    Dim i As Integer

    Set ExcelObj = CreateObject("Excel.Application")
    Set ExcelSheet = CreateObject("Excel.Sheet")

    ExcelObj.WorkBooks.Open App.Path & "\ExcelFile.xls"

    Set ExcelBook = ExcelObj.WorkBooks(1)
    Set ExcelSheet = ExcelBook.WorkSheets(1)

    Dim l As ListItem
    lvwList.ListItems.Clear
    With ExcelSheet
    i = 1
    Do Until .cells(i, 1) & "" = ""
        Set l = lvwList.ListItems.Add(, , .cells(i, 1))
        l.SubItems(1) = .cells(i, 2)
        l.SubItems(2) = .cells(i, 3)
        l.SubItems(3) = .cells(i, 4)
        i = i + 1
    Loop

    End With

    ExcelObj.WorkBooks.Close

    Set ExcelSheet = Nothing
    Set ExcelBook = Nothing
    Set ExcelObj = Nothing
于 2012-05-02T13:54:26.817 回答
2

我更有可能为此使用某种网格控件而不是 ListView,但是...

由于您只是在没有元数据(格式化)的情况下引入值,您可以使用 Jet 的 Excel IISAM 之一来执行此操作,它甚至可以在未安装 Excel 的机器上工作!

Dim SheetName As String
Dim RS As ADODB.Recordset
Dim LI As ListItem
Dim I As Integer

'Look up 1st Worksheet (or just hardcode its Name).
'
'Notes:
'  o Can use Excel 8.0 or Excel 5.0 to read most Excel 7.0/97
'    Workbooks, but there is no IISAM specifically for Excel 7.0.
'  o Use HDR=Yes if your Worksheet has a header row.
With CreateObject("ADOX.Catalog")
    .ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" _
                      & App.Path & "\sample.xls';" _
                      & "Extended Properties='Excel 5.0;HDR=No'"
    SheetName = .Tables(0).Name
    Set RS = New ADODB.Recordset
    Set RS.ActiveConnection = .ActiveConnection
End With
'The "Table" name can be a range too, e.g. [Sheet1$A1C7]
With RS
    .Open "[" & SheetName & "]", _
          , _
          adOpenForwardOnly, _
          adLockReadOnly, _
          adCmdTable
    ListView.ListItems.Clear
    ListView.View = lvwReport
    For I = 0 To .Fields.Count - 1
        ListView.ColumnHeaders.Add , , .Fields(I).Name
    Next
    Do Until .EOF
        Set LI = ListView.ListItems.Add(, , CStr(.Fields(0).Value))
        For I = 1 To .Fields.Count - 1
            LI.SubItems(I) = CStr(.Fields(I).Value)
        Next
        .MoveNext
    Loop
    .Close
End With
于 2012-05-05T15:05:42.110 回答