PDA

View Full Version : مبتدی: dispose کردن پروسه excel



sldvhlds
پنج شنبه 16 شهریور 1396, 14:06 عصر
سلام دوستان
با استفاده از کدهای زیر اطلاعات یک دیتا گرید رو توی یک فایل اکسل ذخیره می کنم مشکلی که وجود داره اینه که هربار برنامه اجرا میشه وفایل خروجی ساخته میشه
توی تسک منیجر ویندوز یک پروسس به نام EXCEL.EXE ایجاد میکنه و اگه تعداد دفعات اجرای برنامه بالا بره ویندوز هنگ میکنه متد dispose رو هرجای کدهام اجرا میکنم باز این مشکل حل نمیشه ممنون میشم دوستان راهنمائی بفرمایند که این متد رو کجا وبه چه صورت اجرا کنم که مشکل رفع بشه
string code_meli, Personal_Number, Year, Month; code_meli = txt_code_meli.Text;
Personal_Number = txt_Pnumber.Text;
Year = txt_Year.Text;
Month = txt_Month.Text;
//بایند کردن دیتا گرید ویو به جدول
string ShowAll = "select * from dbo.Personal where code_meli='" + code_meli + "'AND Year='" + Year + "'AND Month='" + Month + "'";
DataTable dt = new DataTable();
dt = Conction.DoQuery(ShowAll);
dgv1 .DataSource =dt ;

object miss = System.Reflection.Missing.Value;
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 = false;
worksheet = workbook.Sheets["Sheet1"];
worksheet = workbook.ActiveSheet;
worksheet.Name = "مهرماه";
worksheet.Cells[1] = "ردیف";
worksheet.Cells[2] = "شماره پرسنلی";
worksheet.Cells[4] = "کدملی";
worksheet.Cells[3] = "نام ونام خانوادگی";
worksheet.Cells[5] = "کارکردماه";


for (int i = 0; i < dgv1.Rows.Count - 1; i++)
{

for (int j = 0; j < dgv1.Columns.Count; j++)
{
worksheet.Cells[i + 2, j + 2] = dgv1.Rows[i].Cells[j].Value;

}
}


//ایجاد فایل خروجی
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Excel Document(*.xlsx)|*.xlsx";
sfd.FileName = "Export";
if (sfd.ShowDialog() == DialogResult.OK)
{
workbook.SaveAs(sfd.FileName, Type.Missing, 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();

}

sldvhlds
یک شنبه 19 شهریور 1396, 16:51 عصر
سلام دوستان عنایتی بفرمائید مشکل بنده حل بشه

Mahmoud Zaad
یک شنبه 19 شهریور 1396, 17:04 عصر
سه خط زیر رو به انتهای کد اضافه کنید:
app=null;
workbook=null;
worksheet==null;

sldvhlds
دوشنبه 20 شهریور 1396, 09:26 صبح
ممنون از پاسختون ولی جواب نداد دوستان راهنمائی دیگه ای اگر دارید ممنون می شم

com_engineer_ab
دوشنبه 20 شهریور 1396, 09:50 صبح
پیشنهاد من اینه که از یکی از کنترل های تلریک استفاده کنی
اینطوری میتونی از گرایدت به چند مدل فایل که یکیش هم اکسل هست خروجی بگیری
از طرفی هم با همچین مشکلاتی مواجه نمیشی

Mahmoud Zaad
دوشنبه 20 شهریور 1396, 09:50 صبح
برای من جواب میده البته یه چند ثانیه ای طول میکشه که طبیعیه.
شما خط زیر رو هم کامنت کن، این خط دیگه اون پیغام save رو در لود اکسل نمایش نمیده:
app.Quit();

sldvhlds
دوشنبه 20 شهریور 1396, 12:43 عصر
سلا دوست عزیز اتفاقا گرید تلریک هست ولی مشکل اینه که خروجی برنامه که تبدیل میشه به یک فایل اکسل از چند تا تیبل داده هاشو میگیره و توی چند تا فایلشیت یک فایل اکسل میریزه
پیشنهاد من اینه که از یکی از کنترل های تلریک استفاده کنی
اینطوری میتونی از گرایدت به چند مدل فایل که یکیش هم اکسل هست خروجی بگیری
از طرفی هم با همچین مشکلاتی مواجه نمیشی

sldvhlds
دوشنبه 20 شهریور 1396, 13:14 عصر
برای من جواب میده البته یه چند ثانیه ای طول میکشه که طبیعیه.
شما خط زیر رو هم کامنت کن، این خط دیگه اون پیغام save رو در لود اکسل نمایش نمیده:
app.Quit(); سلام باز هم نشد توی تسک منیجربازهم یک پروسس به اسم EXCEL.EXE دارم

Mahmoud.Afrad
دوشنبه 20 شهریور 1396, 18:56 عصر
برای اینکه برنامه وابسته به اکسل از مجموعه office نباشد، از پروژه های رایگان یا اوپن سورسی مثل EPPlus و OpenXMLSDK و ... استفاده کنید.