Probleme avec DataGridViewRow

Signaler
Messages postés
62
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
30 juin 2007
-
Messages postés
223
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
5 mai 2014
-
bonjour,
j'essaye d'executer un code pour exporter un datagridview vers excel, le code se trouve ici. Mon probleme est juste avec le datagridview, toujours il compte la derniere ligne poutant elle est vide.
par exemple pour l'image ci dessous il y a 2 lignes alors pour le programme il y a 3 lignes.
dites moi comment resoudre le probleme
A voir également:

12 réponses

Messages postés
62
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
30 juin 2007
2
"desole je n'arrive pas a faire un upload a l'image"
Messages postés
223
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
5 mai 2014

Ceci pourra peut être t'aider :
Ca recopie un datagrid dans Excel.
Sinon, avant de recopier ta ligne, fait un test pour savoir si la valeur de tes Cell est "null". Si toutes les Cell de ta DataGridViewRow sont égales à null, alors c'est ta ligne vide.

<ol class="csCode"><li>        
public
void
Impression(
string
Titre, DataGridView Data)</li><li>        {</li><li>            
try
</li><li>            {</li><li>                <samp>//UseWaitCursor = true;</samp></li><li>                
object
Missing = System.Reflection.Missing.Value;</li><li>                String fileName =
new
ConfigForm().getCheminDOCS() + <var>"Vierge.xls"</var>;</li><li>                Microsoft.Office.Interop.Excel._Application xlApp;</li><li>                Microsoft.Office.Interop.Excel._Workbook xlClasseur;</li><li>                Microsoft.Office.Interop.Excel._Worksheet xlFeuill;</li><li> </li><li>                xlApp =
new
Microsoft.Office.Interop.Excel.Application();</li><li>                xlApp.Visible =
true
;</li><li>                xlClasseur = xlApp.Workbooks.Open(fileName,</li><li>                    Missing, Missing, Missing, Missing,</li><li>                    Missing, Missing, Missing, Missing,</li><li>                    Missing, Missing, Missing, Missing,</li><li>                    Missing, Missing);</li><li>                Microsoft.Office.Interop.Excel.Sheets xlFeuilles = xlClasseur.Sheets;</li><li>                xlFeuill = (Microsoft.Office.Interop.Excel._Worksheet)xlFeuilles[<var>"A"</var>];</li><li>                Microsoft.Office.Interop.Excel.Range r;</li><li>                r = xlFeuill.get_Range(<var>"A1"</var>, Missing);</li><li>                r.set_Value(Microsoft.Office.Interop.Excel.XlRangeValueDataType.xlRangeValueDefault, Titre.ToString());</li><li>                r = xlFeuill.get_Range(<var>"A2"</var>, Missing);</li><li>                r.set_Value(Microsoft.Office.Interop.Excel.XlRangeValueDataType.xlRangeValueDefault, <var>"Imprimé le "</var> + DateTime.Now.ToString().Substring(0, 10));</li><li> </li><li>                
int
ligne = 6;</li><li>                
int
Cl = 0;</li><li>                
string
champ = <var>""</var>;</li><li>                <samp>//.Affichage des noms de colonne</samp></li><li>                
foreach
(DataGridViewColumn clm
in
Data.Columns)</li><li>                {</li><li>                    
if
(clm.Visible)</li><li>                    {</li><li>                        champ = LettreFromIndice(Cl) + <var>"4"</var>;</li><li>                        r = xlFeuill.get_Range(champ, Missing);</li><li>                        r.set_Value(Microsoft.Office.Interop.Excel.XlRangeValueDataType.xlRangeValueDefault,
clm.HeaderText.ToString());</li><li>                        Cl++;</li><li>                    }</li><li>                }</li><li>                <samp>//.Remplissage des lignes</samp></li><li>                
foreach
(DataGridViewRow dr
in
Data.Rows)</li><li>                {</li><li>                    
try
</li><li>                    {</li><li>                        
for
(
int
j 0; j < Data.ColumnCount; j++)</li><li>                        {</li><li>                            champ LettreFromIndice(j) + ligne.ToString();</li><li>                            r = xlFeuill.get_Range(champ, Missing);</li><li>                            
try
</li><li>                            {</li><li>                                r.set_Value(Microsoft.Office.Interop.Excel.XlRangeValueDataType.xlRangeValueDefault,
dr.Cells[j].Value.ToString());</li><li>                                <samp>//MessageBox.Show(dr.Cells[j].Style.BackColor.ToArgb().ToString());</samp></li><li>                                r.Interior.ColorIndex =
this
.getCouleurExcel(System.Convert.ToInt32(dr.Cells[j].Style.BackColor.R),
System.Convert.ToInt32(dr.Cells[j].Style.BackColor.G),
System.Convert.ToInt32(dr.Cells[j].Style.BackColor.B));</li><li>                                <samp>//r.Font.FontStyle = Color.FromName(dr.Cells[j].Style.Font.Style.ToString());</samp></li><li>                            }</li><li>                            
catch
</li><li>                            {</li><li>                                
if
(System.Convert.ToBoolean(dr.Cells[j]))</li><li>                                    r.set_Value(Microsoft.Office.Interop.Excel.XlRangeValueDataType.xlRangeValueDefault, <var>"Oui"</var>);</li><li>                                
else
</li><li>                                    r.set_Value(Microsoft.Office.Interop.Excel.XlRangeValueDataType.xlRangeValueDefault, <var>"Non"</var>);</li><li>                            }</li><li>                        }</li><li>                    }</li><li>                    
catch
{ }</li><li>                    ligne++;</li><li>                }</li><li>                <samp>//xlFeuill.Columns.Width</samp></li><li>                <samp>//UseWaitCursor = false;</samp></li><li>            }</li><li>            
catch
{ MessageBox.Show(<var>"Impossible d'ouvrir le document Excel type : Vierge.xls"</var>); }</li><li>        }</li><li>        
public
int
getCouleurExcel(
int
R,
int
G,
int
B)</li><li>        {</li><li>            
if
(R == 0 && G == 0 && B == 0)</li><li>                
return
2;</li><li>            
else
if
(R > G && R > B)</li><li>                
return
3;</li><li>            
else
if
(G > B)</li><li>                
return
4;</li><li>            
else
return
5;</li><li>        }</li><li>        
private
string
LettreFromIndice(
int
Indice)</li><li>        {</li><li>            
if
(Indice < 26)</li><li>                
return
((
char
)(65 + Indice)).ToString();</li><li>            
else
return
<var>""</var>; <samp>//A faire</samp></li><li>        }</li></ol>

MMN
Messages postés
62
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
30 juin 2007
2
Messages postés
62
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
30 juin 2007
2
merci pour la reponse Moomoon, mais j'ai l'erreur suivante:
ConfigForm() est inconnu ou une directive est manquante                        
                
Messages postés
223
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
5 mai 2014

Oups, excuse moi.
Tu remplaces  :
new
ConfigForm().getCheminDOCS() + <var>"Vierge.xls"</var>;
par le chemin de ton fichier Excel.
ex : @"c:\FichierVierge.xls"

MMN
Messages postés
62
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
30 juin 2007
2
oui, j'ai fait ca auparavant mais j'ai toujours des problemes concernant le fonctionnement de ce programme. si tu peux m'envoyer directement ton projet compile ca serait mieux (rudh9@yahoo.com)
merci
Messages postés
223
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
5 mai 2014

Non j'peux pas désolé.
Ce bout de code c'est 1/10000ème de mon projet.
C'est un prog top secret pour ma boite, je peux pas le partager .

Communique moi tes erreurs, je t'aiderai.

MMN
Messages postés
62
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
30 juin 2007
2
moi je ne veux pas ouvrir un fichier excel, mais enregistrer mon datagridview dans un fichier excel.
je remplis mon datagrid puis je fais appel à la procedure Impression, le fichier s'ouvre mais j'ai le message d'erreur: <var>"Impossible d'ouvrir le document Excel type : Vierge.xls"</var>
Messages postés
223
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
5 mai 2014

Ah ok !

Avec mon code, le fichier Excel doit EXISTER.
(Qu'on me corrige si je me plante pour la suite !

Ca, ça instancie ton fichier excel :
Microsoft.Office.Interop.Excel._Application xlApp;
Microsoft.Office.Interop.Excel._Workbook xlClasseur;
Microsoft.Office.Interop.Excel._Worksheet xlFeuill;
xlApp =
new
Microsoft.Office.Interop.Excel.Application();
xlApp.Visible =
true
;
Pour la modifier, tu dois avoir fait cette instanciation qui ouvre une application Excel (Excel est dans les processus).
Avec xlApp.Visible =
true
; tu rends ton appli visible. Donc si tu la met a false, elle est cachée.
Ce qu'il me manque c'est le code pour la refermer après les modifications en fait.
Je n'ai pas cherché parce que je n'en avait pas l'utilité (les librairies Office n'étant pas sur le msdn en plus).

J'espère avoir pu t'aider

MMN
Messages postés
223
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
5 mai 2014

Je crois que t'a mal compris une chose en fait :
- Le fichier Excel doit exister
- Le code "impression" recopie le datagrid dans le fichier Excel
- L'impression du fichier Excel, sa fermeture et son enregistrement sont inexsitant

MMN
Messages postés
62
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
30 juin 2007
2
moomoon merci pour ton aide, j'ai trouvé la solution et je l'ai deposé dans ce site


Ce qu'il me manque c'est le code pour la refermer après les modifications en fait.

je peut t'aider pour fermer le processus excel, puisque moi aussi je ne l'ai pas mis dans mon source:
        private void Fermer()
        {
            if (xlClasseur != null)
                xlClasseur.Close(true, fichier, M);

            // Forcer le nettoyage pour que tout soit bien fermé
            if (xlFeuil1 != null)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlFeuil1);
            if (xlClasseur != null)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlClasseur);
            if (xlFeuilles != null)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlFeuilles);
            if (xlRng1 != null)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRng1);

            xlFeuil1 = null;
            xlClasseur = null;
            xlFeuilles = null;
            xlRng1 = null;

            if (xlApp != null)
            {
                xlApp.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
                xlApp = null;
            }
        }

avec ceci
        private Microsoft.Office.Interop.Excel.ApplicationClass xlApp;
        private Microsoft.Office.Interop.Excel.Workbook xlClasseur;
        private Microsoft.Office.Interop.Excel._Worksheet xlFeuil1;
        private Microsoft.Office.Interop.Excel.Sheets xlFeuilles;

        System.Object M = System.Reflection.Missing.Value;
        private Microsoft.Office.Interop.Excel.Range xlRng1;

et pour l'enregistrement regarde ma source
Messages postés
223
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
5 mai 2014

OK c'est cool !

MMN