J'essaie d'extraire une table de valeurs d'une feuille de calcul Excel (2003) en utilisant vb6, dont le résultat doit être stocké dans un jeu d'enregistrements (adodb). Le tableau ressemble à ceci:Colonnes ignorées utilisant vb6 pour extraire d'Excel
Name Option.1 Option.2 Option.3 Option.4 Option.5 Option.6 ----------------------------------------------------------------- Name1 2 3 4 Name2 2 3 4 Name3 2 3 4 Name4 2 3 4 Name5 2 3 4 Name6 2 3 4 Name7 2 3 4 Name8 2 3 4 Name9 2 3 4 5 6 7
Lors de la connexion et l'exécution de la requête « SELECT * FROM [Sheet1$]
» ou même une colonne spécifique, « SELECT [Option#6] FROM [Sheet1$]
» (voir référence 1) et une boucle à travers les résultats, je me donne Null
valeurs pour la plutôt que les valeurs correctes 5, 6 et 7. Il semble que la connexion à la feuille de calcul utilise une «meilleure estimation» pour déterminer les limites de table valides, et ne prend qu'un nombre défini de lignes en compte.
Pour me connecter à la feuille de calcul, j'ai essayé les deux fournisseurs de connexion Microsoft.Jet.OLEDB.4.0
et MSDASQL
et j'ai rencontré le même problème.
Voici les paramètres de connexion que j'utilise:
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & filePath & ";Extended Properties=Excel 8.0;"
- - - - OR - - - -
.Provider = "MSDASQL"
.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & filePath & ";MaxScanRows=0;"
.CursorLocation = adUseClient
.Open
End With
Set rsSelects = New ADODB.Recordset
Set rsSelects = cn.Execute("SELECT [Option#5] FROM " & "[" & strTbl & "]")
Ce problème se produit uniquement quand il y a plus de 8 lignes (à l'exclusion des noms de colonnes), et j'ai mis MaxScanRow=0
pour la connexion MSDASQL
, mais cela a produit les mêmes résultats.
références de projets notables j'ai inclus sont:
- MS ActiveX Data Objects 2.8 Library
- MS ActiveX Data Objects Recordset 2.8 Bibliothèque
- MS Excel 11.0 Object Library
- MS Data Binding Collection VB 6.0 (SP4)
Toute aide à ce sujet serait très appréciée!
(1) Pour une raison quelconque, lorsque vous incluez un point décimal dans le nom de la colonne, il est interprété comme un #.
Merci à tous! A mi-chemin en essayant de mettre en place un Schema.ini
« programme » de KB155512onedaywhen est un excellent post m'a orienté vers la solution:
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & filePath & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
J'encourage toute personne ayant des problèmes similaires à lire le post et les commentaires, car il y a de légères variations à une solution d'une personne à l'autre.
Au moins, j'étais dans le stade. +1 – Tomalak