Méthode plus rapide de transfert de données d'un DataGridView vers Excel
cs_warzet
Messages postés99Date d'inscriptionjeudi 17 janvier 2008StatutMembreDernière intervention25 juillet 2013
-
6 mars 2013 à 09:54
cs_warzet
Messages postés99Date d'inscriptionjeudi 17 janvier 2008StatutMembreDernière intervention25 juillet 2013
-
14 mars 2013 à 08:04
Bonjour à tous,
j'ai un gros soucis avec mon code de transfert de données vers Excel.En effet,on utilise ce code
#region FICHE PROFESSEUR PRINCIPAL
else if (this.btnImprimer.BackColor == Color.Green)
{
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 + @"/Impressions/Fiche_pp.xlsx", M, M, M, M, M, M, M, M, M, M, M, M, M, M);
oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oWB.ActiveSheet;
oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oWB.Sheets[1];
oSheet.Name = "Feuil1";
oSheet.Activate();
foreach (DataGridViewColumn col in dgvNotes.Columns)
{
if (oSheet.Cells[4, 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[1, 9] = "Ministère de l'Education Nationale";
oSheet.Cells[2, 9] = "Direction Régionnale de l'Education Nationale";
oSheet.Cells[3, 9] = "Collège Racine Divo";
oSheet.Cells[4, 9] = "Bp 103 Tel/Fax : 32.76.05.26";
oSheet.Cells[5, 9] = "E-mail : cracinedivo@yahoo.com";
oSheet.Cells[6, 9] = "D I V O";
oSheet.Cells[7, 9] = "République de Côte d'Ivoire";
oSheet.Cells[8, 9] = "Union - Discipline - Travail";
oSheet.Cells[9, 9] = "EFFECTIF : ";
oSheet.Cells[10, 9] = string.Concat("CLASSE : ", this.txtClasse.Text);
j = 1;
foreach (DataGridViewRow uneLigne in dgvNotes.Rows)
{
i = 2;
int h = 0;
if (oSheet.Cells[1, 1] != null)
{
oRng = oSheet.get_Range(Convert.ToChar(65 + h).ToString() + j.ToString(), M);
for (k = 0; k < dgvNotes.Rows.Count - 1; k++)
{
oSheet.Cells[k + 1, 1] = k + 1; //col.Name.Trim();
oRng.Interior.ColorIndex = Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic;
oRng.Font.Bold = false;
//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 dgvNotes.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 = false;
//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++;
}
oXL.Visible = true;
//_MaFeuille = (_Worksheet)_MonClasseur.Sheets[NumeroFeuille];
oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oWB.Sheets[2];
oSheet.Name = "FICHE";
oSheet.Activate();
//_MaFeuille.Name = NouveauNom;
//_MaFeuille.Activate();
}
catch
{
}
}
#endregion
pour transférer le contenu d'un DataGridView vers Excel. Quand tu as 232 ligne tu mets environs 6min ce qui à pour conséquence de bloquer l'application. Quelqu'un a-t-il une solution? Merci d'avance. Bonne journée
A voir également:
Méthode plus rapide de transfert de données d'un DataGridView vers Excel
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 6 mars 2013 à 21:21
Salut,
as tu essayé sans les multiples appels aux oSheet.get_Range()
et aux styles des cellules comme Bold, ColorIndex ect...
Puisque tu fais cela cellule par cellule, c'est très long.
On peut appliquer des styles à toutes une ligne ou à toutes une région.
A part ça,
il y a une autre solution,
c'est de créer un fichier HTML contenant la grille que tu veux importer (<table>) avec style et couleurs.
Puis de lancer excel via un new Process().Start()
avec excel.exe pour filename et le fichier HTML comme param.
Excel le chargera très rapidement.
D'ailleurs tu peux essayer avec n'importe quel fichier HTML contenant une <TABLE> en faisant click droit dessus, puis "ouvrir avec" excel.
cs_warzet
Messages postés99Date d'inscriptionjeudi 17 janvier 2008StatutMembreDernière intervention25 juillet 20131 14 mars 2013 à 08:04
Bonjour Yann_lo_san,
Je suis un grand débutant, aussi je n'arrive pas à faire un pas dans la méthode que tu m'as expliqué, aussi voudrais-tu m'aider sincèrement avec une ébauche de code? Merci pour ta sollicitude.
Bonjour à toi Whismeril, à ton lien indiqué, je n'ai trouvé qu'une vague explication pour mon modeste niveau en C#, aussi, voudrais-tu peut-être me l'expliquer, si tu en as le temps, Merci pour tout.
Bonne journée à vous