begin process at 2012 02 04 09:23:38
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > EXPORTER UN DATAGRIDVIEW VERS EXCEL

EXPORTER UN DATAGRIDVIEW VERS EXCEL


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Base de données Source .NET ( DotNet ) Classé sous :datagridview, excel Niveau :Initié Date de création :10/08/2006 Date de mise à jour :10/08/2006 20:47:17 Vu :33 495

Auteur : rahou

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

 Description

Ce code permet d'exporter de manière simple un dataGridView vers Excel.
Il admet comme paramètre le nom du Contrôle dataGridView, le chemin vers un fichier excel de destination des données du dataGrid, et une chaine représentant l'en-tête du fichier excel généré.

Source

  • #region ExporterDataGridVersExcel Surchargé Type #1
  • ///<summary>
  • ///Permet d'exporter un DataGrid vers excel
  • ///</summary>
  • /// <param name="dgView">Data Grid Source des données à Exporter vers Excel</param>
  • ///<param name="unFichier">Fichier Excel de destination des données</param>
  • ///<param name="strEnteteDeFichier">Libellé de l'en-tête du fichier à générer</param>
  • public void ExporterDataGridVersExcel(DataGridView dgView, String unFichier, string strEnteteDeFichier)
  • {
  • int i = 0;
  • int j = 0;
  • try
  • {
  • ExcelApplication excel = new ExcelApplication();
  • Workbook exbook = (Workbook)excel.Workbooks.Add(Missing.Value);
  • Worksheet exsheet = (Worksheet)excel.ActiveSheet;
  • //Double[] Totaux= new Double[4];
  • //Mise en forme de l'en-tête de la feuille Excel
  • exsheet.Cells[1, 1] = strEnteteDeFichier;
  • Range r = exsheet.get_Range(Convert.ToChar(65 + i).ToString() + "1", Missing.Value);
  • r.Interior.ColorIndex = XlColorIndex.xlColorIndexAutomatic;
  • r.Font.Bold = true;
  • r.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThin, XlColorIndex.xlColorIndexAutomatic, Missing.Value);
  • r.EntireColumn.AutoFit();//Fin de la mise en forme de l'en-tête.
  • foreach (DataGridViewColumn ch in dgView.Columns)
  • {
  • r = exsheet.get_Range(Convert.ToChar(65 + i).ToString() + "1", Missing.Value);
  • exsheet.Cells[2, i + 1] = ch.Name.Trim();
  • r.Interior.ColorIndex = XlColorIndex.xlColorIndexAutomatic;
  • r.Font.Bold = true;
  • r.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThin, XlColorIndex.xlColorIndexAutomatic, Missing.Value);
  • r.EntireColumn.AutoFit();
  • i++;
  • }
  • j = 3;
  • foreach (DataGridViewRow uneLigne in dgView.Rows)
  • {
  • i = 1;
  • foreach (DataGridViewColumn uneColonne in dgView.Columns)
  • {
  • r = exsheet.get_Range(Convert.ToChar(65 + i - 1).ToString() + j.ToString(), Missing.Value);
  • exsheet.Cells[j, i] = "'" + uneLigne.Cells[uneColonne.Name].Value.ToString().Trim();
  • r.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThin, XlColorIndex.xlColorIndexAutomatic, Missing.Value);
  • r.EntireColumn.AutoFit();
  • i++;
  • }
  • exsheet.Columns.AutoFit();
  • j++;
  • }
  • exsheet.SaveAs(unFichier, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
  • excel.Quit();
  • }
  • catch (Exception ex)
  • {
  • throw (ex);
  • }
  • }//ExporterDataGridVersExcel
  • #endregion //ExporterDataGridVersExcel
#region ExporterDataGridVersExcel Surchargé Type #1
        ///<summary>
        ///Permet d'exporter un DataGrid vers excel
        ///</summary>
        /// <param name="dgView">Data Grid Source des données à Exporter vers Excel</param>
        ///<param name="unFichier">Fichier Excel de destination des données</param>
        ///<param name="strEnteteDeFichier">Libellé de l'en-tête du fichier à générer</param>
        public void ExporterDataGridVersExcel(DataGridView dgView, String unFichier, string strEnteteDeFichier)
        {
            int i = 0;
            int j = 0;
            try
            {
                ExcelApplication excel = new ExcelApplication();
                Workbook exbook = (Workbook)excel.Workbooks.Add(Missing.Value);
                Worksheet exsheet = (Worksheet)excel.ActiveSheet;
                //Double[] Totaux= new Double[4];

                //Mise en forme de l'en-tête de la feuille Excel
                exsheet.Cells[1, 1] = strEnteteDeFichier;
                Range r = exsheet.get_Range(Convert.ToChar(65 + i).ToString() + "1", Missing.Value);
                r.Interior.ColorIndex = XlColorIndex.xlColorIndexAutomatic;
                r.Font.Bold = true;
                r.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThin, XlColorIndex.xlColorIndexAutomatic, Missing.Value);
                r.EntireColumn.AutoFit();//Fin de la mise en forme de l'en-tête.

                foreach (DataGridViewColumn ch in dgView.Columns)
                {
                    r = exsheet.get_Range(Convert.ToChar(65 + i).ToString() + "1", Missing.Value);
                    exsheet.Cells[2, i + 1] = ch.Name.Trim();
                    r.Interior.ColorIndex = XlColorIndex.xlColorIndexAutomatic;
                    r.Font.Bold = true;
                    r.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThin, XlColorIndex.xlColorIndexAutomatic, Missing.Value);
                    r.EntireColumn.AutoFit();
                    i++;
                }
                j = 3;

                foreach (DataGridViewRow uneLigne in dgView.Rows)
                {
                    i = 1;
                    foreach (DataGridViewColumn uneColonne in dgView.Columns)
                    {
                        r = exsheet.get_Range(Convert.ToChar(65 + i - 1).ToString() + j.ToString(), Missing.Value);
                        exsheet.Cells[j, i] = "'" + uneLigne.Cells[uneColonne.Name].Value.ToString().Trim();
                        r.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThin, XlColorIndex.xlColorIndexAutomatic, Missing.Value);
                        r.EntireColumn.AutoFit();
                        i++;
                    }
                    exsheet.Columns.AutoFit();
                    j++;
                }
                exsheet.SaveAs(unFichier, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                excel.Quit();
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }//ExporterDataGridVersExcel
        #endregion //ExporterDataGridVersExcel

 Conclusion

Merci de l'améliorer et donner vos remarques.


 Historique

10 août 2006 20:47:17 :
Erreur sur le Titre de la source

 Sources de la même categorie

Source .NET (Dotnet) ENTITY FRAMEWORK - AVOIR UN INCLUDE TYPÉ par jesusonline
Source avec Zip APPLICATION BASE DE DONNÉES par pretude
Source avec Zip Source avec une capture Source .NET (Dotnet) CRÉATION DE CLASSES MÉTIERS À PARTIR D'UNE BASE DE DONNÉES par sebmafate
Source avec Zip Source avec une capture Source .NET (Dotnet) C# SQLCE DEMO par DanMor498
Source avec Zip EXPORTATION DE FICHIER CSV VERS UNE TABLE SQLSERVER par imothepe_33

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) GESTIONNAIRE DES TODO DISSEMINES UN PEU PARTOUT DANS VOS COD... par dodo7263
Source avec Zip Source avec une capture Source .NET (Dotnet) PROJECTMANAGER par dodo7263
Source avec Zip Source .NET (Dotnet) EXCEL SERVER par TheOnlyMaX
Source avec Zip Source .NET (Dotnet) EXPORTER UN DATAGRIDVIEW VERS EXCEL par rudhf
Source .NET (Dotnet) IMPRESSION DE FICHIERS WORD/EXCEL par Moomoon07

Commentaires et avis

Commentaire de elhazard le 02/10/2006 17:30:48

Salut, il y a pas mal d'erreurs dans le code :

1) il ne faut pas oublier d'ajouter les references
using Microsoft.Office.Interop.Excel et de faire (pour utiliser le code comme ca)
using ExcelApplication = Microsoft.Office.Interop.Excel.Application;

2)tu veux au debut imprimer les
r = exsheet.get_Range(Convert.ToChar(65 + i).ToString() + "1",  colonnes :
ce n'est pas + "1" mais "2" dans ce cas et je te conseille plutot d'utiliser les index de la datagridview (colonne et ligne)que des indices de boucles


3)dans la boucle foreach verifie que la valeur n'est pas nulle dans la datagridview avant d'y acceder
if (exsheet.Cells[j, i] != null) et n'oublie pas qu'il n'y a pas que des String dans une datagridview donc il vaut verifier le type avant (typeof)

4) il faut sécuriser plus ton code :
si l'application echoue a la fin il faut mettre le
excel.Quit() dans un finalize:
    
            catch (Exception ex)
            {
                throw (ex);
            }
            finalize
           {
            excel.Quit();
           }

voila bon courage

Commentaire de elhazard le 02/10/2006 20:58:48

j'ai été un peu rapide (sur le 3eme point) il faut bien sur vérifier si l'objet contenu dans la case du datagridview existe et donc (cells[i].value != null)
désolé :]

Commentaire de rudhf le 26/10/2006 22:50:47

bonjour,
tu as cree cette application avec quelle version de VS, est ce la version 2003 ou 2005 parce que je trouve quelques problemes pour utiliser l'application.
j'ai ajoute l'objet COM Microsoft.Office mais il m'affiche l'erreur suivante:

Le type ou le nom d'espace de noms 'Interop' n'existe pas dans la classe ou l'espace de noms 'Microsoft.Office' (une référence d'assembly est-elle manquante ?) C:\Documents and Settings\User\Mes documents\Visual Studio 2005\Projects\ExporterVersExcel\ExporterVersExcel\Form1.cs

Commentaire de rahou le 27/10/2006 01:05:11

J'ai utilisé la version 2005 de visual studio.
Pour l'espace de noms "INTEROP", il faut importer l'objet COM "Microsoft Excel Objet library 11 (pour excel 2003)".
Pour répondre au post précédent : ce code est juste un exemple qui permet aux autres qui ont des soucis pour faire un code pareil de s'inspirer de celui-ci. Toute remarque ou amélioration utile est la bienvenue.

Commentaire de rudhf le 27/10/2006 12:27:48

oui bien sur, j'ai ajoute l'objet COM "Microsoft Excel Objet library 11"
ensuite j'ai ajoute la ligne using ExcelApplication = Microsoft.Office.Interop.Excel.Application;
mais il m'affiche l'erreur :
Le type ou le nom d'espace de noms 'Interop' n'existe pas dans la classe ou l'espace de noms 'Microsoft.Office' (une référence d'assembly est-elle manquante ?)
alors comment faire ???

Commentaire de elhazard le 27/10/2006 19:38:01

Personnelement j'ai compilé le projet avec visual 2005 donc tu devrais pas avoir de problemes :
tu dois rajouter la référénce : cherche Microsoft.office.interop.excel dans les objets COM;
sinon, le using ExcelApplication = Microsoft.Office.Interop.Excel.Application n'est pas tres joli :]
Rahou, ne voit pas de reproches dans mon post précédent, ton code source m'a bien aidé à comprendre les interop
et je t'en remercie =)
++

Commentaire de rahou le 28/10/2006 02:08:49

Un de mes amis a déjà eu ce problème avec "INTEROP" auparavant. Mais après une réinstallation de Office 2003 avec l'option "complète", le problème était résolu. Apparemment, certaines options d'instalaltion doivent être cochées pour que ces objets COM soient disponibles.
elhazard : j'accepte toutes les critiques et je te remercie aussi pour celles que tu as postées et ça m'a aussi permis de mieux sécuriser mon code. ;-)

Commentaire de rudhf le 28/10/2006 14:37:33

dans les references COM moi je n'ai pas "Microsoft.office.interop.excel" je vais reinstaller mon Office puis on verra

Commentaire de rudhf le 28/10/2006 18:18:30

j'ai toujours des problemes, pouvez vous m'envoyer le projet compile directement (rudh9@yahoo.com)
merci

Commentaire de a_alexandrov le 20/08/2007 14:37:30

use DataGridView Extension - it is free and gives you the ability to export to Excel, Html, soon Pdf (they say). Also you can search for text, save some settings as a theme, make all controls look and behave the same very easy.

http://www.completit.com/Products/DGVE/Overview.aspx

Hope it will be helpfull.

Commentaire de xerico le 29/11/2007 21:35:55

en vb tu utiliser :
Dim excel As New Excel.ApplicationClass()

Commentaire de MoKaLux le 17/01/2009 22:44:15

Bonjour,
merci pour le code je l'ai essayé et il m'a bien crée un fichier excel à partir de ma dgv. Génial mais...

Le prog bug avant de finir et g l'erreur :

System.Runtime.InteropServices.COMException was unhandled
Message="Exception from HRESULT: 0x800A03EC"
  Source=""
  ErrorCode=-2146827284
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException:

POURQUOI SVP ???

EN TOUT CAS MERCI POUR LE CODE

Commentaire de MoKaLux le 18/01/2009 00:08:49

euh pardon, cela fonctionne très bien merci.

Mon problème était d'avoir une cellule vide dans mon dgv !!! maintenant c super bon.
Encore une fois MERCI...

Commentaire de MoKaLux le 18/01/2009 00:10:58

euh !!! quelqu'un sait-il comment on fait pour que le code fonctionne même si il y a d cellules vides ???
Merci...
:-)

Commentaire de Hurin le 15/02/2009 09:42:31

Merci beaucoup pour ce code qui m'a beaucoup aidé, et merci également pour la discussion en dessous sur les références à ajouter !

Bonne journée

Commentaire de ldonalt le 13/03/2009 17:44:04 9/10

Merci pour ce code et les commentaires.
Je veux juste rajouter que si on a plus de 26 colonnes dans la table, il y a l'erreur Message="Exception from HRESULT: 0x800A03EC".
Il faut revoir la commande "Convert.ToChar(65 + i).ToString()"
J'ai créé une fonction pour remplacer cette ligne de commande ( exemple: NomCellule(0)=A,  NomCellule(26)=AA)

private string NomCellule(int i)
        {
            int resultat=0;
            string retour_Char="";
            while (i >= 0)
            {
                if (resultat != 0)
                {
                    retour_Char =Convert.ToChar(65 + resultat-1).ToString();
                    i--;
                }
                if (i <= 25)
                {
                    retour_Char = retour_Chaine + Convert.ToChar(65 + i).ToString();
                    break;
                }
                else //i>25
                {
                    i = i - 25;
                    resultat++;
                }
            }
            return retour_Char;
        }

Commentaire de poomen le 11/03/2011 22:17:11

je travaille dans visuel studio 2008 , mais il me souligne sur office sur tout les lignes , j'ai ajoute la ligne using ExcelApplication = Microsoft.Office.Interop.Excel.Application; mas il y a toujours l'erreur , quelqu'un peut m'aider ??

Commentaire de ingenieurA le 03/06/2011 22:04:24

salut tout le monde s'il vous plait je un petit prog ou fonction qui me permet d'appeler outlook  dans c# pour envoyer des mails??????????

Commentaire de xerico le 03/06/2011 22:12:41

@ingenieurA
string command = "mailto:info@codegain.com?subject=The CodeGain-Editor";
Process.Start(command);

la longueur de l'argument "command" ne doit pas dépasser 2080 caractère.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

copier/coller cellules d'un datagridview [ par ansizak ] Bonjour,Je souhaiterais pouvoir effectuer un copier/coller du contenu de cellules selectionnées d'un tableau excel vers un datagridview (de même dimen Réorganisation colonnes datagridview et excel [ par 250386 ] Bonjour, Voila mon problème : J'ai autorisé, sur ma datagridview, la réorganisation des colonnes. Quand j'exporte ma datagridview dans Excel, j'ai Forcer un datagridview chargé depuis excel à etre toujours affiché [ par medbm ] Bonsoir, voila mon problème, j'ai réussi à afficher un datagridview depuis un fichier excel dans une winform , Mais quand je passe vers une autre winf Export un DataGridView vers excel le plus rapidement possible. [ par forme123 ] Bonjour à tous,Je cherche une méthode rapide pour faire un export de données d'un datagridview comportent 10 colonnes et plus de 100000 lignes vers un SOS excel vers datagridview [ par YuneSh ] Salut ! SVP j'exporte des données de excel vers datagridview le tous marche bien sauf que les champs TéléphoneClient dont la chaîne des caractères con exporter le contenu de ma datagridview vers excel [ par YuneSh ] svp je cherche un code pour exporter le contenu de ma datagridview vers excel le problème c'est que j'ai déjà essayer pas mal de code qui marche bien EXPORTER UN DATAGRIDVIEW VERS EXCEL [ par YuneSh ] je change les noms des champs en utilisant Mydatagrid.columns["NomColonne"].HeaderText = "MonLibelle"; et ca marche; MAIS quand j'exporte les donnés v ProgressBar et datagridview [ par YuneSh ] SVP je charge des données lus d'une base de données dans ma datagridview en utilisant un simple MyDataGrid.DataSource = MaDataSet.Tables["MaTable"]; m C# Changer la couleur de fond des cellules d'une colonne Excel [ par YuneSh ] SVP je veux savoir comment pourrais-je changer la couleur du contenu des cellules d'une colonne dans un fichier Excel ! Merci YùnéSh enregistrer les données d'une datagridview a une table linq to sql [ par tsdigra ] bonjours ; si quelqu'un peut m'aider j'ai un problème de datagrid. j'ai un datagridview rempli et je veux enregistrer tous les données de ma grid da


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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,515 sec (3)

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