Access
 sql >> Base de données >  >> RDS >> Access

Paramètres de chaîne de connexion pour les sources de données Excel

Paramètres de chaîne de connexion pour les sources de données Excel

Dans l'article précédent, j'ai expliqué comment nous pouvons traiter les fichiers Excel et texte comme s'il s'agissait d'une base de données utilisant DAO, et comment nous pouvons les ouvrir sans lien. Parce qu'ils n'utilisent pas de pilotes ODBC, leur chaîne de connexion sera formatée assez différemment de ce que vous pourriez être habitué à voir pour une chaîne de connexion ODBC. Il y a un manque de documentation sur les paramètres de chaîne de connexion Excel. Il s'agit d'un meilleur effort pour couvrir certaines des lacunes et discuter des ramifications des paramètres.

Paramètres de chaîne de connexion Excel

Même si nous avons 3 "types" de sources de données différents :

  1. Excel 8.0 :97-2003 fichiers xls
  2. Excel 12.0 :fichiers xlsb
  3. Excel 12.0 Xml :fichiers xlsx

Ils utilisent tous les mêmes paramètres.

Voici la liste des paramètres :

HDR paramètre :Ligne d'en-tête

YES  :La première ligne est l'en-tête et devrait devenir les noms de colonne pour le "table"/"recordset"
NO :La première ligne n'est pas traitée différemment et est juste une donnée. Tous les noms de colonne seront nommés "FN" où "N" est un nombre commençant par 1

IMEX paramètre :Comportement d'importation/exportation

Cela régit la façon dont les types de données de colonne doivent être définis, en fonction du contenu :
1 :Si la colonne contient différents types de données, traitez-la comme une chaîne. Sinon, faites correspondre la colonne au meilleur type de données.
2 :associez toujours la colonne à un certain type de données en fonction de l'échantillon. Cela peut entraîner une erreur de lecture lorsque nous lisons une ligne contenant des données qui ne correspondent pas au type de données attendu.

ACCDB paramètre :indique qu'Access utilise le format de fichier ACCDB ?

Par défaut, ceci est toujours défini ACCDB=YES dans un format de fichier accdb. Cependant, l'omettre ou le définir sur NON ne semble rien faire. C'est un peu un mystère. Si quelqu'un peut partager l'effet de ce paramètre, postez-le en commentaire et je mettrai à jour le blog.

DATABASE :chemin d'accès au classeur Excel

Le paramètre doit contenir un chemin d'accès complet, y compris le nom du classeur.

Chaîne de connexion fonctionnelle minimale

Notez que DATABASE est le seul paramètre obligatoire en plus du mot-clé source du type de données. Par conséquent, une chaîne de connexion fonctionnelle minimale peut être :

Excel 8.0;DATABASE=C:\Links\Products.xls

Spécification d'une feuille ou d'une plage dans la chaîne de connexion

Dans l'exemple précédent, vous avez vu qu'une feuille représentait un "DAO.TableDef “. Cependant, les feuilles de calcul ne sont pas la seule chose qui peut être un "Tabledef “. Si la feuille de calcul Excel contient une plage nommée, la plage nommée sera signalée comme un "Tabledef " aussi bien. De plus, nous pouvons "interroger" un bloc arbitraire dans la feuille en utilisant l'adresse de cellule. Par exemple :

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")
Set rs = db.OpenRecordsset("Sheet$1A1:A3")

Debug.Print rs.Name, rs.Fields.Count

Il est important de noter que les adresses de cellule ne peuvent pas dépasser la plage utilisée de la feuille. Par exemple, le Products.xlsx n'a en fait que du contenu dans A1:B3, cela signifie que si vous ouvrez un jeu d'enregistrements à l'aide de Sheet1 $ A1:D5, vous n'obtenez toujours que 2 pour le nombre de champs et 3 pour le nombre d'enregistrements. Les colonnes/lignes vides supplémentaires sont simplement ignorées. D'un autre côté, si vous avez sali une cellule quelque part en dehors du A1:B3 , la UsedRange de la feuille sera désormais aussi grand et l'interrogation inclura alors des colonnes et des lignes vides.

Par conséquent, ce sont des noms valides à utiliser dans une requête sur une "base de données" Excel :

  1. Sheet1$ – Toute la plage utilisée d'une feuille de calcul.
  2. Sheet1$A1:B4 – Seulement 2 colonnes et 3 lignes (sans compter l'en-tête), à ​​condition que le contenu soit rempli. Sinon, les colonnes ou les lignes peuvent être inférieures à celles demandées.
  3. ProductsRange – la plage nommée portant ce nom.

Je trouve beaucoup plus agréable d'utiliser des plages nommées lorsque cela est pratique, car cela garantit que vous ne codez pas en dur les adresses dans votre code, en particulier si la plage est déplacée en raison de l'insertion de nouvelles colonnes ou lignes par l'utilisateur, mais sans modifier le contenu de la plage nommée . Cependant, ce n'est pas toujours pratique, surtout si vous recevez des feuilles de calcul d'un tiers et que vous n'avez donc aucun contrôle sur leur contenu ou leur format. Dans ce cas, écrire une requête SQL peut également fonctionner.

Interroger la source de données Excel

Supposons que nous ne pouvons pas contrôler le format et que nous ne voulons pas nous fier à l'adresse absolue même si nous sommes convaincus que certaines colonnes et lignes seront en fait présentes. Dans cette situation, la meilleure chose à faire est d'interroger. Voici un exemple qui ne sélectionne qu'une seule ligne :

  Dim db As DAO.Database
  Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")

  Dim rs As DAO.Recordset
  Set rs = db.OpenRecordset("SELECT d.[Count] FROM [Sheet1$] AS d WHERE d.[Products] = 'Bananas';")
  Debug.Print rs.Fields(0).Value

J'espère que vous pouvez voir que c'est beaucoup plus facile que d'itérer sur chaque ligne pour trouver celle qui contient "Bananes", puis de lire la colonne à droite pour obtenir le décompte. Dans ce cas, l'interrogation vaut mieux que l'automatisation d'Excel.

Conclusion

Vous avez vu que DAO nous permet de travailler très facilement avec une source de données Excel et de prétendre qu'il s'agissait d'une source de données relationnelle et d'utiliser notre langage de requête préféré et des objets DAO familiers au lieu d'écrire un tas de code VBA automatisant Excel pour trouver le données que nous voulons. Les paramètres de chaîne de connexion sont assez simples et tant que vous avez le chemin, vous êtes bon pour lier ou ouvrir une feuille de calcul Excel.

Dans le prochain article, nous examinerons les paramètres de connexion des fichiers texte.