Export datagrid vers excel c# winform

lezba Messages postés 8 Date d'inscription mercredi 4 avril 2012 Statut Membre Dernière intervention 27 mai 2012 - 27 mai 2012 à 18:00
Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 - 6 juin 2012 à 10:39
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

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
27 mai 2012 à 18:31
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
0
lezba Messages postés 8 Date d'inscription mercredi 4 avril 2012 Statut Membre Dernière intervention 27 mai 2012
27 mai 2012 à 19:26
je l'ai fait mais ca ne marche pas !
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
27 mai 2012 à 21:04
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
0
Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
6 juin 2012 à 10:39
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.
0
Rejoignez-nous