Importer une feuille excel dans une datatable

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

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.