C# Importation feuille Excel vers un DataTable [Résolu]

Signaler
Messages postés
15
Date d'inscription
mardi 14 juin 2005
Statut
Membre
Dernière intervention
23 septembre 2008
-
Messages postés
9
Date d'inscription
dimanche 28 novembre 2010
Statut
Membre
Dernière intervention
14 février 2011
-
Bonjour,
Je souhaite importer des données situées dans une feuille Excel vers un DataTable. Pas de pb pour l'accès à ma feuille Excel, mais là où ça se complique c'est que je ne veux importer uniquement les données situées dans la colonne "Numero" qui peut être située n'importe où dans ma feuille.
Quelqu'un peut-il m'aider ? Merci.

8 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
La requête "SELECT Numéro FROM [Feuil1$] WHERE Numéro<>NULL" devrait suffir
([Feuil1$] est la notation pour la feuille "Feuil1".)

Petit exemple vite fait :

OleDbConnection dbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"");
OleDbCommand dbCommand = new OleDbCommand("SELECT Numéro FROM [Feuil1$] WHERE Numéro<>NULL", dbConn);

StringBuilder sbListeNumeros = new StringBuilder();

dbCommand.Connection.Open();
OleDbDataReader dbDR = dbCommand.ExecuteReader();

while ( dbDR.Read() )
{
sbListeNumeros.Append(dbDR["Numéro"]);
sbListeNumeros.Append(";");
}

dbCommand.Connection.Close();

MessageBox.Show(sbListeNumeros.ToString());

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Salut,

Si tu utilises une chaîne de connexion de ce genre : "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
"HDR=Yes;" indique que la première ligne de la feuille contient les noms de colonne, ce qui te permettra de repérer la colonne en connaissant son nom au lieu de sa position.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
15
Date d'inscription
mardi 14 juin 2005
Statut
Membre
Dernière intervention
23 septembre 2008

Je n'utilise pas de chaine de connexion de ce genre. Dans mon appli, l'utilisateur sélectionne un fichier XL et le traitement doit s'exécuter sur ce fichier.
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Ah et donc comment tu le lis ton fichier xls ?

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
15
Date d'inscription
mardi 14 juin 2005
Statut
Membre
Dernière intervention
23 septembre 2008

J'utilise la méthode open de Workbooks
ex: ThisApp.Workbooks.Open (fileName,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing)
où fileName correspond au nom de mon fichier XL.
Après j'ai essayé avec la classe Range
mais je n'arrive pas à récupérer uniquement le contenu des cellules dont j'ai besoin (cellules non vides et uniquement de la colonne "Numero").
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Ah donc oui tu n'attaques pas le fichier comme si c'était une base de données.
Là je n'y connais absolument rien dsl

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
15
Date d'inscription
mardi 14 juin 2005
Statut
Membre
Dernière intervention
23 septembre 2008

J'ai réfléchi à ce que tu as écris précédemment. Je n'ai rien contre le fait d'attaquer mon fichier par une connexion oledb mais après comment je fais pour récupérer uniquement les données de la colonne "Numéro" de ma feuille XL ???
Messages postés
9
Date d'inscription
dimanche 28 novembre 2010
Statut
Membre
Dernière intervention
14 février 2011

svp liste des using et refferences à utiliser
merci