begin process at 2010 03 22 07:56:43
  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 :26 952

Auteur : rahou

Ecrire un message privé
Site perso
Commentaire sur cette source (16)
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) LIRE DATETIME AVEC MILLISECONDES DANS SQL SERVER par muffin516
Source avec Zip Source avec une capture Source .NET (Dotnet) DEMO_XML_BASE_DE_DONNÉES par DanMor498
Source avec Zip Source avec une capture Source .NET (Dotnet) EXPORTER SCRIPT SQL SQL SERVER (CREATE - DROP - INSERT - TAB... par citt
Source avec Zip Source .NET (Dotnet) BULKINSERT EN C# par Malkuth
Source avec Zip Source avec une capture Source .NET (Dotnet) SPLIT SQL SANS TABLE TEMPORAIRE par TheOnlyMaX

 Sources en rapport avec celle ci

Source avec Zip PILOTER EXCEL VIA MICROSOFT.OFFICE.INTEROP.EXCEL par whismeril
Source avec Zip Source .NET (Dotnet) LIAISON DE 3 TABLES GRACE AU CURRENCYMANAGER par Arthenius
Source avec Zip Source .NET (Dotnet) CRÉER UN ADDIN AUTOMATION POUR EXCEL par ShareVB
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;
        }

 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 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 Configuration NHibernate base Excel [ par Spixy ] Bonjour à tous,Voilà, c'est la1ère fois que je crée un fichier de configuration xml pour NHibernate, et je ne vois pas trop quoi mettre où pour bien d Modifier le nom des colonnes d'un DataGridView [ par mimosa803 ] Bonsoir,J'ai un datagridView qui prend comme DataSource un DataTable créé en dur. Le problème lorsque j'affiche le grid, j'obtiens des noms de colonne bindingsource et datagridview [ par herakles66 ] Bonjour !Voilà j'aurais besoin d'un petit avis sur le problème que je me pose ...Dans mon code je fais le lien entre mes listes que je souhaite affich probleme de rafraichissment de datagridView [ par hoodlum ] Bonjour a tous,J'aimerai de l'aide pour un problème qui me parait simple mais je ne m'y retrouve plus, je suis entrain de réaliser une application, ce nb de ligne et compute column [ par fdouieb ] Bonjour, J'ai deux questions au sujet des datagridview. 1 - ma datagridview se remplie à partir des données d'une base de donnée sql serveur. Cepend raffraichissement dataGridView [ par suethi75 ] Bonjour, Je souhaiterai raffraichir ma dataGridView après avoir effacé une ligne de la dataGridView. Cependant, je ne connais pas la méthode à utilise [C#]Excel [ par alexis02 ] Bonjour, je souhaite réalisé une application en C# avec Visual studio expresse 2008 qui me permet de lire un fichier excel(classeur) .xls afin de ré


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

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,905 sec (4)

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