2011-05-23 4 views
0

Nous utilisons fréquemment des fichiers Excel comme source de données pour les importations massives dans notre base de données. Au niveau du code, on se réfère toujours à la source de données correspondante comme:Utilisation d'EXCEL comme source de données via le fournisseur Microsoft OLE DB

set rs = New ADODB.recordset 
rs.open "SELECT * FROM [sheet1$]", myConnectionString, etc 

Bien sûr, cette procédure ne fonctionne que quand il y a une feuille dans le fichier Excel qui est nommé [sheet1]. Je voudrais ajouter un code de gestion de feuille ici, mais sans avoir à créer une instance du fichier Excel d'origine, l'ouvrir, etc. (mes utilisateurs pourraient obtenir un fichier avec un nom de feuille différent, et Excel pourrait ne pas être installé).

Une idée?

Répondre

2

Vous pouvez ouvrir un jeu d'enregistrements avec la méthode ADO OpenSchema, puis répertorier les noms de table (feuille) dans votre classeur.

Public Sub SheetsInWorkbook() 
    Dim strConnect As String 
    Dim cn As Object 
    Dim rs As Object 
    Dim strPath As String 

    strPath = CurrentProject.Path & Chr(92) & "temp.xls" 
    strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" _ 
     & "Data Source='" & strPath & "';" _ 
     & "Extended Properties='Excel 8.0';" 
    Set cn = CreateObject("ADODB.Connection") 
    cn.ConnectionString = strConnect 
    cn.Open 
    Set rs = cn.OpenSchema(20) '20 = adSchemaTables ' 
    Debug.Print "TABLE_NAME" 
    Do While Not rs.EOF 
     Debug.Print rs!TABLE_NAME 
     rs.MoveNext 
    Loop 

    rs.Close 
    Set rs = Nothing 
    cn.Close 
    Set cn = Nothing 
End Sub 
+0

Bravo à HansUp! Merci! –

+0

Je pense que cela est plus efficace que d'automatiser Excel pour ouvrir la feuille de calcul et vérifier le nom de la première feuille de calcul dans le classeur, ce que j'ai toujours fait. –

Questions connexes