PDA

View Full Version : خروجی اکسل دیتاگریدویو با سرعت بالا



نیکناز
سه شنبه 12 دی 1391, 12:55 عصر
سلام
من یه دیتابیس با 50 هزار رکورد دارم
یه فرم دارم که یه سری قابلیت های سرچ براش در نظر گرفتم.
خروجی این فیلترها معمولا 10 تا 30 هزار رکورد هست که تو دیتاگرید نمایش میده و من میخوام از دیتاگرید خروجی اکسل بگیرم
من یه سری کد از نت سرچ کردم در واقع تمام کدها شبیه هم بود و یه زمان طولانی برای خروجی صرف میکرد

من کدی میخوام که سرعت خروجی بالاتر بره
لطفا راهنمایی کنید
ممنونم
سیستمی که نرم افزار روش نصبه سیستم بدی نیست 2 گیگ رم داره



public void OutPutExcel(DataGridView dgv)
{
SaveFileDialog objSaveFileDialog = new SaveFileDialog();
objSaveFileDialog.Filter = "Excel files(*.xls;*.xlsx)|*.xls;*.xlsx";
objSaveFileDialog.ShowDialog();
if (objSaveFileDialog.FileName != "")
{
System.Globalization.CultureInfo oldci = System.Threading.Thread.CurrentThread.CurrentCultu re;
System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-us");
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 = (Microsoft.Office.Interop.Excel._Worksheet)workboo k.Sheets["Sheet1"];
worksheet = (Microsoft.Office.Interop.Excel._Worksheet)workboo k.ActiveSheet;
worksheet.Name = "bonyad";

DataTable dtGridData = new DataTable();
//dtGridData = (DataTable)_dgv_information_person.DataSource;
DataRow dtRow;
try
{
foreach (DataGridViewColumn col in dgv.Columns) // dgvData is the name of the gridView
dtGridData.Columns.Add(col.DataPropertyName);
foreach (DataGridViewRow gridRow in dgv.Rows)
{
if (gridRow.IsNewRow)
continue;
dtRow = dtGridData.NewRow();
for (int i1 = 0; i1 < dgv.Columns.Count; i1++)
dtRow[i1] = (gridRow.Cells[i1].Value == null ? null : gridRow.Cells[i1].Value);
dtGridData.Rows.Add(dtRow);
}
}
catch (Exception)
{ }
for (int h = 1; h < dgv.Columns.Count + 1; h++)
{
worksheet.Cells[1, h] = dgv.Columns[h - 1].HeaderText;
}
//worksheet.Cells[1, 1] = "A".ToString(); // header text in excel based on your need
//worksheet.Cells[1, 2] = "B".ToString(); // header text in excel based on your need
//worksheet.Cells[1, 3] = "C".ToString(); // header text in excel based on your need

for (int i = 0; i < dtGridData.Rows.Count; i++)
{
for (int j = 0; j < dtGridData.Columns.Count; j++)
{
worksheet.Cells[i + 2, j + 1] = dtGridData.Rows[i][j].ToString();
}
}
//for (int i = 0; i < dgv.Rows.Count; i++)
//{
// DataGridViewRow row = dgv.Rows[i];
// for (int j = 0; j < row.Cells.Count; j++)
// {
// worksheet.Cells[i + 1, j + 1] = row.Cells[j].Value.ToString();
// }
//}
//
worksheet.Rows.Font.Size = 9;
worksheet.Rows.Font.Name = "tahoma";
//
workbook.SaveAs(objSaveFileDialog.FileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWork bookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode. xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
app.Quit();
}
}

ad.davachi
شنبه 05 اسفند 1391, 11:16 صبح
سلام منم مشکل سرعت دارم از یک سری از اطلاعاتم از دیتابیس خروجی اکسل میگیرم که به شدت سرعتم پایین اومده شما راه حلی برای این مشکل پیدا کردید؟
مثلا اگه بشه خروجی رو پارت پارت به کاربر هم بدیم خوب میشه ولی نمیدونم چطوری؟

ad.davachi
شنبه 05 اسفند 1391, 12:06 عصر
من فکر میکنم این خط کدها سرعت رو تو حجم بالا خیلی پایین میاره ولی نمیدونم چطور میشه دیتاتیبل یا گرید رو توی table ریخت که برای اکسل قابل خوندن باشه
لطفا کمک کنید


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