Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EXPORTER UN DATAGRIDVIEW VERS EXCEL


Information sur la source

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 : 23 689

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (17)
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

Commentaires et avis

signaler à un administrateur
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

signaler à un administrateur
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é :]

signaler à un administrateur
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

signaler à un administrateur
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.

signaler à un administrateur
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 ???

signaler à un administrateur
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 =)
++

signaler à un administrateur
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. ;-)

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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.

signaler à un administrateur
Commentaire de xerico le 29/11/2007 21:35:55

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

signaler à un administrateur
Commentaire de guluguili le 20/03/2008 16:26:16

referencez :
Microsoft Office 11.0 Object Library
puis
Microsoft Excel 11.0 Object Library

Sous VS c# 2008 express ca fonctionne très bien.

signaler à un administrateur
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

signaler à un administrateur
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...

signaler à un administrateur
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...
:-)

signaler à un administrateur
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

signaler à un administrateur
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;
        }

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 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 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 Datagridview évolué [ par salad1976 ] Bonjour;j'ai un problème avec le datagrid standard: j'arrive pas a rendre la colonne case a cocher desable (et je crois que c'est impossible). j'ai pe Contrôler les données lors de la saisie dans un datagridview [ par alexbesn ] Bonjour. J'ai un datagridview lié à un dataset. Je met à jour la base avec des Dataadaptateur et commandbuilder. Quand je modifie ou ajoute directem Actualisation des données dans une Form et datagridview? [ par nabilG ] Salut, j'ai un petit soucis en C# sous VS2008. J'ai créé une Form avec datagridview avec VS2008 et j'ai configuré une connection, je lui ai demandé datagridview [ par oaca ] bonjour, je travaille avec C# et sql server 2005. j'ai un pb avec datagridview:comment peux_je sauvegarder mon datagridview dans la base de donnée apr Excel dans csharp Rechercher Remplacer .. [ par kdior ] Bonjour, Je suis débutant en Csharp, j'ai crée une application Csharp  qui génère un fichier Excel.je souhaiterai utiliser la fonction Rechercher et R Sélectionner un graphique existant dans une feuille Excel [ par mdelahais ] Bonjour,J'ai un fichier excel contenant un graphique. Je préfère partir d'un graphique existant, plutôt que de la créer, ce qui m'évite de faire toute


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,905 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.