2009-09-07 7 views
2

Dans VB6:Automatiser Importation de plusieurs feuilles de calcul Excel dans SQL

Je dois permettre à un utilisateur de sélectionner un fichier Excel, puis télécharger toutes les fiches de travail à une table SQL. Je ne suis pas sûr de savoir comment faire cela. Le format de chaque feuille est exactement le même. Et le format de feuille de calcul correspond au format de table SQL.

Je me tape vraiment la tête contre le mur ici. Si quelqu'un pouvait offrir une suggestion, un exemple de code, etc., je l'apprécierais vraiment.

Merci les gars.

+0

Pouvez-vous utiliser SSIS? –

+0

Non, ce n'est pas disponible. DTS ou une autre méthode. –

+0

Pas de réponses le jour de la fête du travail? : ") –

Répondre

2

Vous pouvez utiliser le fournisseur ODBC pour les fichiers Excel. Voici un code écrit en javascript pour importer un fichier Excel dans une table SQL Server. Chaque feuille de travail est traitée comme une seule table. Il y a quelques problèmes avec les types de données car le pilote ODBC déduit le type de données de chaque colonne en lisant ses premières valeurs. Ainsi, si une colonne contient des nombres dans les premières lignes de données, la colonne sera lue comme numérique et "non numérique". La valeur sera lue comme NULL.

var objCat = new ActiveXObject("ADODB.Connection"); 
var objRSExcel = Server.CreateObject("ADODB.Recordset"); 
objRSExcel.CursorLocation = 3; 
var file = "imported_file.xls"; 
var TableName = "[Sheet1$]" 

// Database Creation 
objCat.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + ";Extended Properties=Excel 8.0;";      
objCat.Open(); 
objRSExcel.Open("SELECT * FROM " + TableName, objCat); 

var rsInsert = Server.CreateObject("ADODB.Recordset"); 
rsInsert.Open("SELECT * FROM [TARGET_TABLE]", cn, 1, 3); 

while (!objRSExcel.EOF) { 
    rsInsert.AddNew(); 
    for (var j=0;j<objRSExcel.Fields.Count; j++) { 
     rsInsert.Fields(j).Value = objRSExcel.Fields(j).Value; 
    } 
    rsInsert.Update(); 
    objRSExcel.MoveNext(); 
} 
objRSExcel.Close(); 
rsInsert.Close(); 
+0

" Il existe des problèmes avec les types de données car le pilote ODBC déduit le type de données de chaque colonne en lisant ses premières valeurs. Ainsi, si une colonne contient des nombres dans les premières lignes, la colonne sera lue comme numérique. toute valeur "non numérique" sera lue comme NULL. " LOL, cela ne semble pas bon! –

+0

Oui, vous savez, les bibliothèques MS sont loin d'être parfaites. – Rodrigo

+0

Voici quelques informations supplémentaires http://support.microsoft.com/kb/189897 – Rodrigo

Questions connexes