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 の 1 つを使用してこれを行うことができ、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 に答える