Click here to Skip to main content
15,886,788 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hello

I need an opinion again, I have paged datagridview and I need to export data from either desired page or filtered data, that means more pages to excel or csv or whatever, but fast, cause I have many records. I have done with excel in previous of my posts here and it works but it is very slow, how to speed things up

this code works but very very very slow, i fa I need to export say 1000 rows ahhhhh man I can go to dinner , come back and it still isn't finished


C#
Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();

Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);

Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
 

app.Visible = true;

worksheet = workbook.Sheets["Sheet1"];
worksheet = workbook.ActiveSheet;

for (int i = 1; i < dg1.Columns.Count + 1; i++)
{
   worksheet.Cells[1, i] = dg1.Columns[i - 1].HeaderText;
}

for (int i = 0; i < dg1.Rows.Count - 1; i++)
{
   for (int j = 0; j < dg1.Columns.Count; j++)
   {
      worksheet.Cells[i + 2, j + 1] = dg1.Rows[i].Cells[j].Value.ToString();
   }
}


[edit]code block added[/edit]
Posted
Updated 17-Nov-12 9:05am
v2
Comments
[no name] 19-Nov-12 0:06am    
If you use Microsoft library, you will get fast reply in msdn forum.
jk0391 27-May-15 15:47pm    
But he's asking here...
F-ES Sitecore 29-May-15 5:18am    
Look into the Excel ODBC driver.

1 solution

Hi,

you need to set all values at once by using Excel.Range, like this:

C#
// Assuming using Excel = Microsoft.Office.Interop.Excel;

String[,] table = ... // 2D String array of datagrid cells

Excel.Range cell1 = null;
Excel.Range cell2 = null;
Excel.Range range = null;

try
{
	// Get range
	cell1 = (Excel.Range)worksheet.Cells[1, 1];
	cell2 = (Excel.Range)worksheet.Cells[numRows, numCols];
	range = worksheet.Range[cell1, cell2];

	// Set range value
	range.Value2 = table;
}
finally
{
	// Don't forget to destroy Excel COM objects.
}
 
Share this answer
 
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900