2009-09-21 7 views
1

J'ai un jeu d'enregistrements qui contient toutes les données nécessaires à l'importation dans un fichier Excel. Existe-t-il un moyen de cloner mon jeu d'enregistrements en cours dans celui créé lorsque j'ouvre un fichier Excel?Clonage d'un jeu d'enregistrements existant vers un jeu d'enregistrements Excel

Voici ce que j'essaie en ce moment sans aucune chance.

Dim connection : Set connection = Server.CreateObject("ADODB.Connection") 

connection.Open "Driver={Microsoft Excel Driver (*.xls)}; DriverId=790; 
       Dbq=c:\MyExcel.xls;" & _ 
       "DefaultDir=c:\; ReadOnly=False;" 
Dim excelRecordset : Set excelRecordset = Server.CreateObject("ADODB.Recordset") 
excelRecordset.Open "[SHEET1$]", connection, 2, 3 

excelRecordset.AddNew 
Set excelRecordset = recordset.clone 

excelRecordset.Update 
excelRecordset.Close 

Merci.

Répondre

1

Lorsque vous faites ceci: -

Set excelRecordset = recordset.clone 

Vous remplacez la référence au recordset ouvert sur la feuille de calcul Excel (et ferme) avec une référence à la nouvelle recordset. Ce nouveau jeu d'enregistrements n'est en aucun cas connecté à la feuille de calcul Excel.

En utilisant recordsets vous n'avez pas vraiment d'autre choix que de For Each par le recordset source, AddNew sur la destination, attribuer à chaque champ de la source à la destination et Update.

+0

C'est ce que je craignais. Pour chaque boucle c'est, merci. :) – user141594

0

Les objets Excel Range ont une méthode CopyFromRecordset qui devrait faire l'affaire. Si vous pouvez créer un objet Excel.Application et ouvrir le classeur auquel vous voulez écrire, vous devriez pouvoir l'utiliser.

Donc, si votre recordset existant est nommé rs et a déjà rempli, le code VBA serait:

Worksheets("SHEET1").Cells(2, 1).CopyFromRecordset rs 

Vous pouvez ensuite itérer sur rs.Fields pour remplir les noms de champs

Dim fld As Field 
Dim i As Integer 
i = 1 
With Worksheets("SHEET1") 
    For Each fld in rs.Fields 
     .Cells(1, i).Value = fld.Name 
     i = i + 1 
    Next fld 
End With 

Vous ne savez pas à quel point cela serait facile à traduire dans votre scénario. Vous pouvez également

si elle est disponible avec le pilote que vous utilisez, vous pouvez regarder dans la syntaxe SELECT INTO et INSERT INTO décrit dans this Knowledge Base article