Probleme avec DataGridViewRow

rudhf Messages postés 62 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 30 juin 2007 - 3 nov. 2006 à 14:59
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014 - 6 nov. 2006 à 00:57
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

rudhf Messages postés 62 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 30 juin 2007 2
3 nov. 2006 à 15:01
"desole je n'arrive pas a faire un upload a l'image"
0
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014
3 nov. 2006 à 15:38
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
0
rudhf Messages postés 62 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 30 juin 2007 2
3 nov. 2006 à 15:42
0
rudhf Messages postés 62 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 30 juin 2007 2
3 nov. 2006 à 17:00
merci pour la reponse Moomoon, mais j'ai l'erreur suivante:
ConfigForm() est inconnu ou une directive est manquante
                
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014
3 nov. 2006 à 17:08
Oups, excuse moi.
Tu remplaces  :
new
ConfigForm().getCheminDOCS() + <var>"Vierge.xls"</var>;
par le chemin de ton fichier Excel.
ex : @"c:\FichierVierge.xls"

MMN
0
rudhf Messages postés 62 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 30 juin 2007 2
3 nov. 2006 à 17:43
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
0
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014
3 nov. 2006 à 19:09
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
0
rudhf Messages postés 62 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 30 juin 2007 2
5 nov. 2006 à 12:49
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>
0
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014
5 nov. 2006 à 21:47
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
0
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014
5 nov. 2006 à 21:50
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
0
rudhf Messages postés 62 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 30 juin 2007 2
5 nov. 2006 à 22:14
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
0
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014
6 nov. 2006 à 00:57
OK c'est cool !

MMN
0
Rejoignez-nous