Importer une feuille excel dans une datatable

Soyez le premier à donner votre avis sur cette source.

Snippet vu 22 382 fois - Téléchargée 19 fois

Contenu du snippet

Cette classe statique (excelIO) possède pour le moment une seule méthode (excelToTable) qui reçoit en paramètre le chemin d'un fichier xls ainsi que le nom de la feuille à traiter et retourne une dataTable.

Il existe plusieurs solutions pour faire ce type de traitement, mais j'ai choisi ici d'utiliser ADO.NET.

excelToTable possède une méthode que l'on pourrait extraire afin d'en créer une nouvelle que nous nommerions dataReaderToDataTable(DataReader dr, DataTable dt)

J'espère que cela pourra vous aider.

Mathieu Francesch
http://www.sharplog-sdi.com

Source / Exemple :


public static class  excelIO
    {
        private static OleDbConnection connectionXLS = new OleDbConnection();
        private static OleDbCommand commandXLS = new OleDbCommand();
        private static OleDbDataReader readerRequete;

        /// <summary>
        /// Fonction qui lit un tableau dans un fichier xls et retourne une Datatable
        /// </summary>
        /// <param name="xlsFile">Chemin du fichier XLS</param>
        /// <param name="xlsSheet">Nom de la feuille</param>
        /// <returns>Retourne une DataTable</returns>
        public static DataTable excelToTable(String xlsFile, String xlsSheet)
        {
            DataTable tableXls = new DataTable();
            DataRow lineXls = null; 

            connectionXLS.ConnectionString = "Data Source=" + xlsFile + "; Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;";
            commandXLS.Connection = connectionXLS;
            commandXLS.CommandType = System.Data.CommandType.Text;
            commandXLS.CommandText = "select * from [" + xlsSheet + "$];";

            connectionXLS.Open();
            readerRequete = commandXLS.ExecuteReader();

            //On récupére le schema du datareader
            DataTable schemaXls = readerRequete.GetSchemaTable();

            //Création des colonnes de la datatable de retour via le schema du Datareader
            for (int i = 0; i < schemaXls.Rows.Count; i++)
			{
			    DataRow line = schemaXls.Rows[i];
                String columnName = line["ColumnName"].ToString();

                DataColumn column = new DataColumn(columnName);
                tableXls.Columns.Add(column);
			}

            //On parcourt les lignes du datareader qu'on ajoute à la datatable 
            while (readerRequete.Read())
            {
                lineXls = tableXls.NewRow();
                for (int i = 0; i < readerRequete.FieldCount; i++)
			    {
                    lineXls[i] = readerRequete[i];     		 
			    }
               
                tableXls.Rows.Add(lineXls);
            }

            readerRequete.Close();
            connectionXLS.Close();
            return tableXls;
        }        
    }

Conclusion :


Très prochainement je rajouterai la méthode pour exporter les données vers un fichier xls (plus simple)

A voir également

Ajouter un commentaire Commentaires
Messages postés
9
Date d'inscription
dimanche 28 novembre 2010
Statut
Membre
Dernière intervention
14 février 2011

svp est ce que je peux avoir les using et les references utilisés car j'ai l'erreur suivante:
Error 1 The type or namespace name 'OleDbConnection' could not be found (are you missing a using directive or an assembly reference?)
Messages postés
4
Date d'inscription
mardi 5 mai 2009
Statut
Membre
Dernière intervention
26 mai 2009

Rebonjour,
Trouvé sur internet. Il semble qu'en modifiant la chaine de connexion avec
..... Extended Properties=" + (char)34 + "Excel 8.0;HDR=Yes;IMEX=1" + (char)34 + ";"

ça marche. C'est le IMEX=1 qui importe(le HDR c'est s'il y a une ligne d'entete)

Pour plus d'infos, voir http://support.microsoft.com/kb/194124/fr
Merci
A+
Messages postés
4
Date d'inscription
mardi 5 mai 2009
Statut
Membre
Dernière intervention
26 mai 2009

Bonjour,
J'utilisais un code maison (un peu semblable à celui-ci) pour recuperer une feuille excel dans une datatable, mais certaines cellules étaient vides dans ma datatable. J'ai essayé avec ta methode mais le resultat est le meme.
Est-ce que vous connaitriez des raisons au niveau des cellules excel qui empecheraient la recup de cellule ?
La plupart des cellulues manquantes sont des nombres, mais pas toutes. Si je les remplace par une chaine, ca fonctionne.
Merci d'avance si vous avez des suggestions.
Damien (c# VS2008, excel 2003)
Messages postés
39
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
27 mars 2009
1
bonjour,
pour ta question JulienBornet d'exporter de csharp vers excel, la meilleure soluce que j'ai trouvé est de faire un copy dans le clipboard et ensuite de le coller dans excel.
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

Bonjour,

Je sais que ton post date un peu mais quand est il tu code que tu devais ajouter sur l'export de données dans un fichier excel, parce que çà me rendrai bien service d'avoir un exemple

D'avance merci ;-)
Afficher les 21 commentaires

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.