Export datagrid vers excel c# winform

Signaler
Messages postés
8
Date d'inscription
mercredi 4 avril 2012
Statut
Membre
Dernière intervention
27 mai 2012
-
Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
-
Bonjour,
j'ai un petit problème par rapport à l'export des données d'une grid view à un fichier excel , lors du transfert , quand j'ouvre un fichier excel n'importe lequel , le fichier excel qui est en cour de traitement devient visible! je voudrai bien résoudre ce problème : voila mon code :

private void exporter(object sender, EventArgs e)
{

int i = 0;
int j = 0;

SaveFileDialog sfd = new SaveFileDialog();
sfd.FileName = "test.xlsx";

//Excel.Application xlAp;
//xlAp = new Excel.Application();

Excel.Application xlApp;
Excel.Workbook xlWorkbook;
Excel.Worksheet xlWorsheet;

object misValue = System.Reflection.Missing.Value;
//object saveChanges = Excel.XlSaveAction.xlSaveChanges;

xlApp = new Excel.Application();
//xlWorkbook = xlApp.Workbooks.Add(misValue);
xlWorkbook = xlApp.Workbooks.Add(misValue);
xlWorsheet = (Excel.Worksheet)xlWorkbook.Worksheets.get_Item(1);
xlApp.Visible = false;

try
{
for (i = 0; i < dataGridView1.RowCount; i++)
{
for (j = 0; j < dataGridView1.ColumnCount; j++)
{
DataGridViewCell cell = dataGridView1[j, i];
xlWorsheet.Cells[i + 2, j + 1] = cell.Value;

}
}

for (int a = 1; a < dataGridView1.Columns.Count + 1; a++)
{
xlApp.Cells[1, a] = dataGridView1.Columns[a - 1].HeaderText;
}


if (sfd.ShowDialog() == DialogResult.OK)
{
xlWorkbook.SaveAs(sfd.FileName);
//xlWorkbook.SaveAs(sfd.FileName, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue,misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive,misValue, misValue, misValue, misValue, misValue);
xlWorkbook.Close(true, misValue, misValue);
xlApp.Quit();


releaseObject(xlWorsheet);
releaseObject(xlWorkbook);
releaseObject(xlApp);

MessageBox.Show("excel file created,you can find the file ", sfd.FileName);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}




private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
}
finally
{
GC.Collect();
}
}

4 réponses

Messages postés
15381
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 janvier 2021
499
Bonsoir

quand tu postes du code utilise les balises de code c'est plus lisible (3ième icône en partant de la droite : )

tu peux faire ça:
xlAp.Visible = False;



Whismeril
Messages postés
8
Date d'inscription
mercredi 4 avril 2012
Statut
Membre
Dernière intervention
27 mai 2012

je l'ai fait mais ca ne marche pas !
Messages postés
15381
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 janvier 2021
499
Ha oui je n'avais pas vu.
Je n'ai pas Excel à la maison donc je ne peux pas tester.

L'application devient forcément visible si tu veux accéder à un autre fichier xls pendant ton traitement.

Peut-être
 xlWorsheet.visible = False;




Whismeril
Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
pourquoi ne pas écrire plutot un fichier au format csv? Si tu utilises le ";", il s'ouvre dans excel avec les lignes déjà séparées en colonnes.