Lire un fichier excel par oledb en .net

Soyez le premier à donner votre avis sur cette source.

Snippet vu 27 629 fois - Téléchargée 19 fois

Contenu du snippet

Suite à une contrainte lors de mes développements, j'ai développé cette méthode.

En effet, je devais lire un fichier excel sur un serveur (appliWeb) mais je ne pouvais pas installer les assembly "office".

Après des recherches sur le Web, j'ai trouvé pas mal d'exemple me montrant comment faire. Donc j'en profite pour vous le montrer à tous

Source / Exemple :


/// <summary>
		/// Permet de charger le contenue d'une feuille excel dans une DataTable à partir du chemin et le nom de la feuille désirée
		/// </summary>
		/// <param name="strcheminFichier">Chemin du fichier Excel</param>
		/// <param name="strNomFeuilleExcel">Nom de la feuille excel</param>
		/// <returns>DataTable contenant l'ensemble des celulles et lignes du fichier Excel. Si la feuille est vide le retour est égal à "Null"</returns>
		/// <remarks>Aucune gestion d'exception n'est faite à l'intérieur de cette méthode</remarks>
		public DataTable GetfichierFeuilleFichierExcel(string strCheminFichier, string strNomFeuilleExcel)
		{
			// Chaine de connexion
			string strCnx = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strCheminFichier + ";Extended Properties=" + (char)34 + "Excel 8.0;HDR=Yes;" + (char)34 + ";";
			System.Data.DataTable dtRetour = null;
			System.Data.OleDb.OleDbConnection oCnx = new System.Data.OleDb.OleDbConnection(strCnx);
			System.Data.OleDb.OleDbCommand objCmdSelect = null;
			System.Data.OleDb.OleDbDataAdapter objAdapter = null;
			System.Data.DataSet oDs = new DataSet();

			// vérification globale des données entrantes
			if(strCheminFichier != string.Empty && strNomFeuilleExcel != string.Empty)
			{
				if(System.IO.File.Exists(strCheminFichier))
				{
					// ouvertur de la connexion
					oCnx.Open();
					// création de la commande
					objCmdSelect =new System.Data.OleDb.OleDbCommand("SELECT * FROM ["+ strNomFeuilleExcel +"$]", oCnx);
					objAdapter = new System.Data.OleDb.OleDbDataAdapter();
					// on informe de l'instruction SELECT
					objAdapter.SelectCommand = objCmdSelect;
					// on execute la requete en spécifiant le protocole et on remplit le DataSet
					objAdapter.Fill(oDs, "XLData");
					// Vérification du dataset
					if(oDs != null && oDs.Tables != null && oDs.Tables.Count > 0)
					{
						dtRetour = oDs.Tables[0];
					}
					else
					{
						dtRetour = null;
					}

					// Libération
					oCnx.Close();
					objCmdSelect.Dispose();
					objAdapter.Dispose();
				}
			}
			return dtRetour;
		}

Conclusion :


Logiquement il n'y a rien à importer au niveau des références car cela utilise le framework de base lors d'un développement WebForm

A voir également

Ajouter un commentaire Commentaires
JuLsupinfo Messages postés 11 Date d'inscription mardi 24 février 2004 Statut Membre Dernière intervention 21 novembre 2007
25 sept. 2007 à 20:58
Bonsoir, saurait-tu comment faire pour sélectionner une colonne d'un fichier Excel, à partir d'une certaine ligne, avec cette méthode ?

Merci d'avance.
cs_veridik Messages postés 13 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 24 juillet 2013
20 févr. 2008 à 09:08
Code bien ficelé !! très pratique
cs_tintin972 Messages postés 36 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 16 mai 2008
9 avril 2008 à 14:22
Salut j'ai un autre petit problème,

En fait cela revient au problème de type de donné que julsupinfo à rencontré.
Lorsqu'on importe le fichier excel VS interprète la colonne étant typé comme la première valeur. C'est a dire que si dans votre colonne votre première valeur (case) est un chiffre il s'attend dans la suite de la colonne à trouver des chiffres, et si il rencontre autre chose (du texte) il ne l'affiche pas...
Julsupinfo a résolu son pb en rajoutant de manière à n'avoir que du string dans son fichier excel...Moi je n'ai pas la chance de pourvoir modifier les données de mon excel, et devinez quoi dans une des colonne j'ai du string ET du num...
Quelqu'un aurait t il une idée pour que VS affiche tout??? Même si il transforme tout en string ca me dérange vraiment pas! Mais faut absolument que j'arrive a afficher toutes les donnés et sans modifier l'excel!
cs_MoKaLux Messages postés 39 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 27 mars 2009 1
7 déc. 2008 à 18:29
Bonsoir, c bon g appris un peu plus grâce à vous tous et je vous en remercie.

private void button1_Click(object sender, EventArgs e)
{
DataTable dt =
GetfichierFeuilleFichierExcel
(@"E:\Coursjeudi.xls", "Bloomberg");

if (dt != null && dt.Rows.Count > 0)
{
// WOUAWWW !!! merci
dataGridView1.DataSource = dt; // ok
}
}

Maintenant je voudrais poser une ou deux questions svp.
Comment faire une recherche (une query) dans le datagridview ? Peut-on utiliser linq ?
Je voudrais par exemple savoir les cellules de la colonne 3 dont la valeur est superieur à 5% et les afficher dans un labelbox.

Merci de votre aide...
wisdoom Messages postés 1 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 décembre 2008
30 déc. 2008 à 09:35
Excellent, juste ce que je cherchais !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.