Transfert de données d'une DataGridView vers un fichier Excel déjà exixtant

Signaler
Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juillet 2013
-
Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juillet 2013
-
Bonjour à tous,
Je voudrais d’emblée m'excuser car il y a longtemps que nous sommes sur ce sujet, mais sachez que je suis un gros débutant. Voilà mon problème est que je souhaiterais transférer le contenu d'un DataGridView dans un fichier Excel que j'aurais préalablement crée, j'ai reçu de l'aide de monsieur Whismeril sur ce lien:
http://www.csharpfr.com/codes/PILOTER-EXCEL-VIA-MICROSOFT-OFFICE-INTEROP-EXCEL_50624.aspx
mais à dire vrai, je n'arrive à trouver comment faire pour cela, alors je demande un coup de pouce.
Merci et bonne journée.

12 réponses

Bonjour warzet

Bon je suppose que tu sais ouvrir excel a partir d'un bouton .

Bon voici un petit bout de code qui marche


 string adresse = dataGridView1.CurrentRow.Cells["ADRESSE_CLI"].Value.ToString();
 string nom = dataGridView1.CurrentRow.Cells["NOM_CLI"].Value.ToString();
 string prenom = dataGridView1.CurrentRow.Cells["PRENOM_CLI"].Value.ToString();
//expliquation pour les lignes d en haut 
// string Nom de la variable = dataGridView1.CurrentRow.Cells["Nom du champs"].Value.ToString
//En gros on fait un changement de type de données
                //Rajoute le texte dans les tables.
                oSheet.Cells[1, 1] = nom + " " + prenom;
                oSheet.Cells[2, 1] = adresse;
                oSheet.Cells[5, 6] = "LA poste ";
          

 oSheet.Cells[1, 1] // Sert a definir la cellule on tu ecrie


Pour ton dataGridView1 il faut que tu le met dans une variable que tu va afficher apres dans une cellule Excel. Tudoit indiquer quelle champs tu veux afficher .


Dit moi si cela va t aider .

Cordialement thefolin
Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juillet 2013
1
Merci de me répondre,
mais je voudrais vous sachiez que c'est toute les colonnes et les lignes du du DATAGRIVIEW que souhaiterais transférer dans un fichier Excel déjà existant comme cela se ferai en Crystal reports. Merci encore. Mais sachez que j'en prends bonne note en vu de le vérifier.
Vite faire meme,va chercher telerick et tu vas voir comment ça se faire,si tu as des problèmes faire moi signe.Tu mets telerick 2011 dans google et tu telecharge,là tu as la réponse à ton problème.
Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juillet 2013
1
Merci Qico. Je vais m'y rendre. mille fois merci
Messages postés
14771
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 septembre 2020
433
Bonsoir,

si tu te sers de mon code,
tu peux réuperer une ligne de ton datagridview dans un tableau (de string ou autre) toto dans cet exemple, ou alors écrire cellule par cellule comme dans la deuxième partie de l'exemple, je change de feuille et sélectionne un Range juste pour le fun.

            string[] toto = {"toto","tatat"};
            bool succes; //valeur pour savoir si le demarage a marché
            GestionExcel MonExcel = new GestionExcel(out succes);//demarrage d'excel
            MonExcel.OuvrirFichierExistant("C:\exemple.xls","Feuill1");//ouvre le fichier existant à la feuille 1
            
            MonExcel.ChangerDeFeuilleActive("Feuill2"); //actvie la feuille 2
            MonExcel.EcrireLigne(toto, 1);//ecrit le contenu de toto à la ligne 1

            MonExcel.SelectionRange("C2", "C2");//selectionne la case C2
            MonExcel.EcrireCellule("J'écris dans C3", "C3");


Whismeril
Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juillet 2013
1
Bonjour Whismeril,
à propos de transfert de (string ou objet), voudrais-tu me donner un petit exemple, puisque moi j'ai beau essayé mais je n'y suis pas arrivé. Merci pour ton aide.
Messages postés
14771
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 septembre 2020
433
Bonsoir,
j'ai fait une petite boulette, à la ligne ci dessous, j'avais oublié l'arrobase

MonExcel.OuvrirFichierExistant(@"C:\exemple.xls","Feuil1");//ouvre le fichier existant à la feuille 1

sinon le code que j'ai écris, ouvre un fichier, change de feuille écrit le contenu d'un tableau à la ligne 1 et du texte dans la case C3. Veux tu que je t'explique le mécanisme de la méthode EcrireCellule?





Whismeril
Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juillet 2013
1
Bonjour Whismeril,
Ta méthode est très bonne et je comprends celle EcrireCellule, mais là où se sirue mon problème est ce qui concerne les DataGridView. En effet pour transférer les données d'un tel objet, habituellement on fait ceci:
private void Click_Exporter(object sender, EventArgs e)
        {
            Microsoft.Office.Interop.Excel.Application oXL;
            Microsoft.Office.Interop.Excel._Workbook oWB;
            Microsoft.Office.Interop.Excel._Worksheet oSheet;
            Microsoft.Office.Interop.Excel.Range oRng;
            object M = System.Reflection.Missing.Value;

            int i = 0;
            int j = 0;
            int k = 0;

            try
            {
                //Start Excel and get Application object.
                oXL = new Microsoft.Office.Interop.Excel.Application();
                oXL.Visible = true;

                //Get a new workbook.
                //oWB = (Microsoft.Office.Interop.Excel._Workbook)(oXL.Workbooks.Add(System.Reflection.Missing.Value));
                oWB = oXL.Workbooks.Open(Application.StartupPath + @"/FicheEleves.xls", M, M, M, M, M, M, M, M, M, M, M, M, M, M);
                oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oWB.ActiveSheet;

                foreach (DataGridViewColumn col in dgvEleves.Columns)
                {
                    if (oSheet.Cells[3, 1] != null)
                    {
                        oRng = oSheet.get_Range(Convert.ToChar(65 + i).ToString() + "1", M);
                        //oSheet.Cells[3, i + 1] = col.Name.Trim();
                        oRng.Interior.ColorIndex = Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic;
                        oRng.Font.Bold = true;
                        //oRng.BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, Missing.Value);
                        //oRng.EntireColumn.AutoFit();
                        i++;
                    }
                }

                oSheet.Cells[4, 1] = "N°";
                oSheet.Cells[4, 2] = "MATRICULE";
                oSheet.Cells[4, 3] = "NOM";
                oSheet.Cells[4, 4] = "PRENOMS";
                oSheet.Cells[4, 5] = "NE LE";
                oSheet.Cells[4, 6] = "LIEU";
                oSheet.Cells[4, 7] = "SEXE";


                j = 5;

                foreach (DataGridViewRow uneLigne in dgvEleves.Rows)
                {
                    i = 2;
                    int h = 0;

                    if (oSheet.Cells[5, 1] != null)
                    {
                        oRng = oSheet.get_Range(Convert.ToChar(65 + h).ToString() + j.ToString(), M);
                        for (k = 0; k < dgvEleves.Rows.Count - 1; k++)
                        {
                            oSheet.Cells[k + 5, 1] = k + 1; //col.Name.Trim();
                            oRng.Interior.ColorIndex = Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic;
                            oRng.Font.Bold = true;
                            //oRng.BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, Missing.Value);
                            oRng.EntireColumn.AutoFit();
                            //k++;
                        }
                    }

                    foreach (DataGridViewColumn uneColonne in dgvEleves.Columns)
                    {
                        if (oSheet.Cells[j, i] != null)
                        {
                            oRng = oSheet.get_Range(Convert.ToChar(65 + i - 1).ToString() + j.ToString(), M);
                            if (uneLigne.Cells[uneColonne.Name].Value != null) oSheet.Cells[j, i] = "'" + uneLigne.Cells[uneColonne.Name].Value.ToString().Trim();
                            oRng.Font.Bold = true;
                            //oRng.BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, Missing.Value);
                            oRng.EntireColumn.AutoFit();
                            i++;
                        }
                    }
                    oSheet.Columns.AutoFit();
                    j++;
                }

            }
            catch (FileNotFoundException Lg)
            {
                MessageBox.Show(Lg.Message, "Erreur");
            }

        }

Mon soucis est alors de pouvoir intégrer ceci à la classe de sorte à positionner les données de DataGridView n'importe où dans mon application. Merci encore pour tout
Messages postés
14771
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 septembre 2020
433
Ha ok,
je comprends que ton seul et unique besoin vis a vis d'excel, est d'exporter ton datagridview avec exactement cette méthode et ce de n'importe ou dans ton application.

Dans ce cas ecrit une classe public static dans laquelle il y a une méthode public static, laquelle prend en argument un datagridview. Tu y colles tout ton code. Et ensuite tu peux l'appeler de n'importe ou sans probleme:

    public static class MaClasse
    {
        
        public static void ExportGrille(DataGridView grille)
        {
             //ici tout ton code
        }
    }


et quand tu veux appeler cette méthode

MaClasse.ExportGrille(dgvEleves);


Whismeril
Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juillet 2013
1
Bjr Whismeril,
Mais n'est-il pas possible d'inclure ma méthode dans ta classe de gestion d'Excel? Bonne journée.
Messages postés
14771
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 septembre 2020
433
Si bien sûr, de la même façon, tu ajoutes une méthode qui prend le datagridview en argument et tu colles ton code dedans.



Whismeril
Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juillet 2013
1
Merci je vais m'y mettre pour chercher.
Bonne journée