1

ACE.OLEDB プロバイダーのおかげで、Excel をインストールしなくても Excel シートを読むことができます。次を使用してワークシートを反復処理することもできますが、間違っていなければ、Office がインストールされている必要があります。

 Set xlApp = CreateObject("Excel.Application")
    Set wb = xlApp.Workbooks.Open(txtExcelFile, ReadOnly:=True, editable:=False)
    If wb.Worksheets.Count = 0 Then
    MsgBox "Excel file contains no worksheets"
    GoTo SubEnd
    End If
    Dim i        As Integer

    For i = 1 To wb.Worksheets.Count
        cboWorksheet.AddItem (wb.Worksheets(i).Name)
    Next

Excel シートにクエリを実行してドロップダウンを入力できるようにしたいのですが、office がインストールされていなくても実行できますか? 現在の状況を説明するために、私は CRM 用の動的インポーターを構築しました。通常、クライアント PC と比較して、オフィスがインストールされる可能性が低いサーバー経由で会社に簡単にアクセスできます。

だから私はExcelファイルをインポートする際にofficeに完全に依存したくありません. もちろん、これは主要な機能ではありません。ワークシート名をテキスト フィールドとして保存できますが、関連するワークシート名を選択できればさらに便利です。

これはできますか、そしてvb6で?ありがとう

4

2 に答える 2

1

このような?

'~~> Add Reference to MS ActiveX Data Objects xx.xx Library
Option Explicit

Private Sub Form_Load()
    Dim SheetName As String
    Dim RS As ADODB.Recordset
    Dim I As Long

    With CreateObject("ADOX.Catalog")
        .ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" _
                          & App.Path & "\sample.xls';" _
                          & "Extended Properties='Excel 5.0;HDR=No'"
        For I = 0 To .tables.Count - 1
            '~~> This will give you sheet names
            Debug.Print .tables(I).Name
        Next I
    End With
End Sub

スクリーンショット

コードがどのように機能するかを示すためにaList1と aを追加しましたCommand1

ここに画像の説明を入力

于 2013-02-20T16:04:00.790 に答える
1

このような列挙を行うには、プレーンな ADO (ADOX ではない) を使用できます。

Option Explicit

Private Sub Command1_Click()
    Dim vElem       As Variant

    For Each vElem In GetSheets("d:\temp\aaa.xlsx")
        Debug.Print vElem
    Next
End Sub

Private Function GetSheets(sFileName As String) As Collection
    Const adStateOpen As Long = 1
    Const adSchemaTables As Long = 20

    Set GetSheets = New Collection
    With CreateObject("ADODB.Connection")
        If LCase$(Right$(sFileName, 5)) = ".xlsx" Then
            .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sFileName & ";Extended Properties=Excel 12.0 Xml"
        Else
            .Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sFileName & ";Extended Properties=Excel 8.0"
        End If
        If .State <> adStateOpen Then
            Exit Function
        End If
        With .OpenSchema(adSchemaTables)
            Do While Not .EOF
                If LCase$(!TABLE_NAME) <> "database" Then
                    GetSheets.Add !TABLE_NAME.Value
                End If
                .MoveNext
            Loop
        End With
    End With
End Function
于 2013-02-21T08:40:25.583 に答える