Connexion OleDb pour Excel; comment puis-je sélectionner une largeur fixe, sans limite de hauteur?

Je suis en utilisant OleDb pour sélectionner des données de feuilles de calcul excel. Chaque feuille de calcul peut contenir de nombreuses petites tables, et, éventuellement, des meubles comme des titres et des étiquettes. Donc, il pourrait ressembler à ceci, où nous avons deux tables et quelques titres;

 A B C D 
1 . . . . 
2 . . . . 
3 Table1 . . . 
4 Header1 HEADER2 . . 
5 h riri . . 
6 d dewey . . 
7 l loius . . 
8 s scrooge . . 
9 . . . . 
10 . . . . 
11 . . . . 
12 . . . . 
13 . Tableau 2 . . 
14 . HEADER1 HEADER2 HEADER3 
15 . 1 foo x 
16 . 2 bar y 
17 . 3 baz z 
18 . . . . 
19 . . . . 

Dans une étape précédente, l'utilisateur a sélectionné les en-têtes de la table, ils sont intéressés; dans ce cas, en regardant le tableau 2, ils auront sélectionné la gamme B14:D14.

Ces paramètres sont enregistrés, et puis j'ai besoin d'interroger la table. Il peut arriver, comme les données de feuille de calcul est mis à jour; plus de lignes peuvent être ajoutées à tout moment, mais les en-têtes sont toujours fixes. Il y a une sentinelle (ligne vide) marquant la fin de données

Pour sélectionner les données dans la table, je suis en train d'écrire une requête comme ceci;

SELECT * FROM [Sheet1$B14:D65535]

pour sélectionner les données dans le tableau 2, puis à vérifier manuellement pour la sentinelle de la ligne, mais cela semble peu satisfaisant. Excel 2003 ne peut lire les lignes 65 535 (uint16), mais excel 2007 peut lire beaucoup plus (uint32), j'ai donc écrire du code qui donne une autre requête pour Excel 2003 et 2007 selon l'extension du fichier (.xls vs .xls?).

Personne ne sait d'une façon d'écrire une requête qui dit;

  • 'tout sélectionner en bas et à droite de B14'?
  • "sélectionner tout dans les colonnes B->D'
  • 'select B12:D*" où * désigne "tout ce que vous pouvez"
Une feuille de calcul Excel 2003 peut contenir 65 536 lignes, numérotées de 0 à 65535 en interne et 1 à 65536 à l'extérieur.

OriginalL'auteur Steve Cooper | 2009-07-16