begin process at 2010 02 10 07:18:34
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

.NET

 > IMPORTER UNE FEUILLE EXCEL DANS UNE DATATABLE

IMPORTER UNE FEUILLE EXCEL DANS UNE DATATABLE


 Information sur la source

Note :
7,25 / 10 - par 4 personnes
7,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :.NET Source .NET ( DotNet ) Classé sous :excel, datatable, datareader Niveau :Initié Date de création :11/07/2007 Date de mise à jour :11/07/2007 23:36:13 Vu :11 732

Auteur : MatthewsNET

Ecrire un message privé
Site perso
Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note

 Description

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

  • 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;
  • }
  • }
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)


 Historique

11 juillet 2007 23:36:13 :
no comment

 Sources de la même categorie

Source avec Zip CHAT SERVER-CLIENT par abderrahmenbilog
Source avec Zip Source avec une capture Source .NET (Dotnet) SIMULATION DE CONSOLE POUR WINDOWS MOBILE par originalcompo
Source avec Zip Source .NET (Dotnet) BASE DE DONNÉES EN XML par DanMor498
Source avec Zip Source avec une capture Source .NET (Dotnet) SIMPLECONV - APPLICATION DE CONVERSION MONÉTAIRE AVEC TAUX E... par Jeffrey_
Source avec Zip Source .NET (Dotnet) TRAITEUR D'IMAGE (MINI) par ycyril

 Sources en rapport avec celle ci

Source avec Zip PILOTER EXCEL VIA MICROSOFT.OFFICE.INTEROP.EXCEL par whismeril
Source avec Zip Source .NET (Dotnet) CRÉER UN ADDIN AUTOMATION POUR EXCEL par ShareVB
Source .NET (Dotnet) LIRE UN FICHIER EXCEL PAR OLEDB EN .NET par rodcobalt22
Source .NET (Dotnet) CREATION DYNAMIQUE D'UN MS REPORT par djamelbarache
Source avec Zip Source avec une capture Source .NET (Dotnet) EXPORTER VOS DONNEES (SQL SERVER,ACCES,XML,EXCEL) RAPIDEMENT... par romagny13

Commentaires et avis

Commentaire de dim3311 le 12/07/2007 09:38:04

aucun try catch dans le code ? dangereux, une fois la connexion est ouverte, de sortir en exception et laissé tous les objets en l'état

Commentaire de MatthewsNET le 12/07/2007 10:19:58

Bonjour Dim,

Tu as parfaitement raison Dim mais ce code n'est pas voué à rester tel quel. Donc, effectivement rajouter des try catch ne serait pas de trop. Ceci dit, attention à l'utilisation abusive des try catch car elles réduisent significativement les performances d'une application.

Commentaire de dim3311 le 12/07/2007 10:25:43

merci de ta réponse

entre réduction de performances et des objets qui restent ouverts en attente que le gc veuille bien en faire qch

n'oublie pas que c'est du com derrière le ado en oldb, donc ton pool de connexions est pris, ton fichier est locké

les try catch finally dans ce genre de code de niveau "initié" n'est point un luxe mais une obligation

bonne continuation
Dimitri

Commentaire de devvassili le 12/07/2007 18:15:37

Merci pour ce code, il est intéressant.
En revanche est-il possible de traiter le type des éléments ? Exemple les dates, les entiers etc.

Bon coding.

Commentaire de MatthewsNET le 12/07/2007 18:56:17

Merci Dev,

Tu peux traiter le type de l'élément en utilisant le nom de colonne DataType comme je l'ai fais pour obtenir le nom de la colonne en utilisant ColumnName. Aprés lorsque tu créé une DataColumn, tu as une surcharge pour spécifier le type de la colonne que tu ajoutes a ta DataTable

M@th

Commentaire de rodcobalt22 le 30/08/2007 15:16:45

Bonjour,
Merci pour ce code ( en faite j'en ai posté un similaire et j'ai vue le tien trop tard :p).
J'aimerai savoir s'il est possible (à mon avis non) de récupérer la couleur de fond d'une cellule (ne serait ce le code hexa de la couleur ou même une série de byte)
Te remerciant d'avance de toute piste

Commentaire de ulysse1976 le 12/11/2007 17:05:38 9/10

salut
merci pour ce code.  
Il m'a bien servit, donc il est normal que je le note ;)

Commentaire de kowalska le 28/02/2008 15:39:25 6/10

Tres bien mais detruie mon fichier xls. Peut plus l'ouvrir dans office apres!!!!!

Commentaire de solos le 20/05/2008 10:15:07

Code interessant. Je l'ai utilisé dans mon prog.
Y a t-il un moyen de recuperer aussi les formules et non les valeurs des cellules??
Merci pour votre reponses


Commentaire de bloodyangel90 le 11/06/2008 16:24:32

Bonjours all,

code intéraissent , mais y a t-il moyen de faire le chemin inverse . de passer d'une datatable a une feuille excel en récupérent tous

Commentaire de rodcobalt22 le 12/06/2008 09:48:55

Salut BloodyAngel90,

Il est en effet possible de faire ça mais en bricolant un peu.
En effet, tu peux de la même manière exécuter des updates ou inserts dans la feuille excel.
A savoir tout de même que la structure doit être vachement proche d'une table ^^

Rod^^

Commentaire de ixor59 le 23/06/2008 10:23:13 8/10

Bonjour à tous.

Tout d'abord merci pour ce code, il m'a bien aidé ;-)

Je reviens à la charge concernant le chemin inverse, c'est-à-dire écrire le contenu d'une  DataTable dans une feuille d'un document Excell.
Quelqu'un aurait-il un lien où trouver comment faire ?

Merci ^^

Commentaire de fastspin le 15/10/2008 12:03:43

Merci pour le code, je le compile OK avec mon form.
Je suis débutant dans le traitement de data.
Je ne comprend pas comment utiliser le retour de return tableXls.
J'essai de binder les data dans un dataGridview. Le Grid prend le nombre de lignes et colonnes de mon Excel sheet mais est vide. Comment puis-je récuperer les donnée et les retrouver dans mon grid?

Commentaire de fastspin le 16/10/2008 13:45:05

Never mind.. J'ai trouvé la solution à ma question. C'est:
dataGridView1.DataSource = buffer;

Buffer étant déclaré dataTable et ensuite la valeur retourné par excelIO.
Attention ne pas faire un binding avec dataGridView. Laisser le biding à "none". C'était en fait mon problème de départ.
Merci à tout ceux qui offre leur service sur ce fantastique site.
Jean-Marc

Commentaire de koudizz le 26/11/2008 12:18:43

Bonjour,
J'ai fenfait réaliser le mème programme suite a une demande de mon chef de projet,mais il me reste un problème,mon fichier programme me charge des celluls  vide malgré q'il sont pas vide dans mon fichier Excel.
Merci de me répondre dans les brefs délais pasque j'auré a livré se travaille aujourd'hui.

Commentaire de MoKaLux le 18/01/2009 02:04:18

Merci pour cette autre façon de faire, cela fonctionne bien. Bon code. Pour les try catch on le fait dans l'autre partie du prog...

Petite question au passage, peut-on faire des modifs sur les colonnes avant de les mettre dans le dataset.
"//On parcourt les lignes du datareader qu'on ajoute à la datatable"
Par exemple si une cellule de la colonne X contient "TOTO" alors la cellule de la colonne Y sera multiplié par 2.

Merci en tout cas...
:-)

Commentaire de julienbornet le 02/02/2009 10:56:44

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 ;-)

Commentaire de MoKaLux le 03/02/2009 11:59:15

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.

Commentaire de damien123456789 le 05/05/2009 12:50:13

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)

Commentaire de damien123456789 le 05/05/2009 13:56:50

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+

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Exporter DataSet ou dataReader vers Excel [ par samystyle ] Bonjour,Je suis &#224;&nbsp;la recherche d'un code ou d'une fonction c# qui me permet d'exporter le resultat d'une requete selection sur sqlserver (qu Une DataTable dans un fichier Excel existant [ par toopix ] Salut, Je voudrais copier une table Oracle dans un fichier Excel. Cette table contient plus de 30 000 lignes... et j'ai des soucis de performances c# Importation feuille Excel vers un DataTable [ par Caro2005 ] Bonjour,Je souhaite importer des donn&#233;es situ&#233;es dans une feuille Excel vers un DataTable. Pas de pb pour l'acc&#232;s &#224; ma feuille Exc DataTable vers Access [ par soupiste ] Salut à la Communauté, Je suis embêté par un sujet qui revient le plus souvent sur le Net, mais auquel je ne parviens pas à trouver la solution. En ef Temps d'exportation des données vers un fichier excel [ par bebyson ] Bonjour à tous j'ai un problème d'exportation des données de datagridview vers un fichier Excel. j'exporte trés bien les données, mais le temps d'ex convertir des chiffres en lettres avec excel [ par cherkio ] bonjour, pouvez vous me dire comment faire pour remplacer des chiffres en lettres sous excel? le but est de remplir des lettres cheques. merci Impression sur papier continu avec Excel [ par ginesis ] Bonjour, J'ai un problème pour définir un format de papier et une zone d'impression sur Excel (2003) pour du papier en continu (liasses). J'ai une i Probléme avec la mise a jour d'une DataTable avec WPF [ par ba3wech ] Salut J'ai un problème avec la mise à jour de mon DataTable. Pour récupérer mon DataTable j'utilise cette méthode: public static DataTable excutequery Lister des éléments de la BDR [ par fred65200 ] bonjour &#224; tous, J'essaie de remplir un tableau avec la liste des derniers classeurs ouverts dans Excel et je bloque. La liste se trouve dans la [Excel, OLE, C#] Insertion d'une formule de type matricielle [ par nerix27 ] Bonjour,voil&#224; le probl&#232;me...sur le serveur de mon parc info&nbsp;est install&#233; un progiciel de comptabilit&#233;...Afin de pouvoir r&#23


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales