Bizarre SÉLECTIONNEZ à partir d'un fichier Excel via OleDbDataAdapter méthode (C#)

J'ai un fichier Excel sous cette forme :

Column 1    Column 2    Column 3  
 data1        data2    
 data1        data2  
 data1        data2  
 data1        data2  
 data1        data2       data3  

Qui est, l'ensemble de la Colonne 3 est vide à l'exception de la dernière ligne.
Je suis accéder au fichier Excel via OleDbDataAdapter, de retour d'un DataTable: voici le code.

query = "SELECT * FROM [" + query + "]";
objDT = new DataTable();
objCmdSQL = this.GetCommand();
objCmdSQL.CommandText = query;
objSQLDad = new OleDbDataAdapter(objCmdSQL);
objSQLDad.Fill(objDT);
return objDT;

Le point est, dans ce scénario, mon code renvoie une DataTable avec juste la Colonne 1 et la Colonne 2.

Ma conjecture est que le moteur JET essaie d'en déduire le type de colonne par le type de la première cellule de chaque colonne; le fait d'être la première valeur null, la colonne entière est ignoré.

J'ai essayé de le remplir de zéros et ce code est en fait le retour de tous les trois colonnes; c'est évidemment la moins bonne solution parce que j'ai à traiter un grand nombre de petits fichiers.

Inverser la sélection de la gamme (à partir de la, c'est à dire "A1:C5" à "C5:A1" ) ne fonctionne pas non plus.
Je suis à la recherche de quelque chose de plus élégant.

J'ai déjà trouvé un couple de billets à propos d'incompatibilité de type (varchar cellules dans les colonnes int et vice-versa), mais en réalité n'ai pas trouvé quoi que ce soit lié à celui-ci.

Merci pour la lecture!

modifier

Le comportement bizarre de nouveau. Je travail principalement sur Excel 2003 .les fichiers xls, mais depuis que cette question a été répondu, j'ai pensé que je pourrais tester mon code par rapport à Excel 2007 .xslx fichiers.
La chaîne de connexion est la suivante:

string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + _fileName.Trim() + @";Extended Properties=""Excel 12.0;HDR=No;IMEX=1;""";

- Je obtenir la "table Externe n'est pas dans le format attendu" l'exception qui je pense est la norme exception lorsqu'il y a une incompatibilité de version entre ACE/JET et le fichier ouvert.

La chaîne

Provider=Microsoft.ACE.OLEDB.12.0 

signifie que je suis en utilisant la version la plus récente de OLEDB, j'ai pris un coup d'oeil rapide autour de et cette version est utilisé partout où il est nécessaire de se connecter à .fichiers xlsx.

J'ai essayé avec juste un fournisseur de vanille ( Excel 12.0, sans IMEX ni HDR ) mais j'obtiens la même exception.

Je suis sur .NET 2.0.50727 SP2, peut-être temps de mettre à niveau?

  • Donc, il n'y a pas les en-Têtes de colonnes dans Excel? Et avez-vous essayé la société IMEX commutateur sur la connexion?
  • Il y a des titres, mais je suis la sélection sur la partie de la table qui ne contient que les données en évitant horizontale et verticale des en-têtes.
InformationsquelleAutor SimoneF | 2010-12-01