Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.22.244] |
|
Сообщ.
#1
,
|
|
|
Доброго времени суток всем! Заранее прошу прощения если тема создана не в том разделе.
Итак, есть код, который из Excel передает все данные на форму в dataGridView1. Естественно после работы с Эксель нужно выгрузить все его барахло для того чтобы он не висел в процессах. Весь код: private void button3_Click(object sender, EventArgs e) { test(); } public void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; } finally { GC.Collect(); } } public void test() { dsTest dSet = new dsTest(); Excel.Application ExcelApp = new Excel.Application(); Excel.Worksheet ExcelWorkSheet; Excel.Workbook ExcelWorkBook; Excel.Range ExcelRange; var workbooks = ExcelApp.Workbooks; ExcelWorkBook = workbooks.Open(@"D:\\Эксель.xlsm", 0, false); ExcelWorkSheet = ExcelWorkBook.ActiveSheet; ExcelRange = ExcelWorkSheet.UsedRange; for (int Rnum = 2; Rnum <= ExcelRange.Rows.Count - 2; Rnum++) { DataRow dr = dSet.DataTable1.NewRow(); for (int Cnum = 1; Cnum <= ExcelRange.Columns.Count; Cnum++) { if ((ExcelRange.Cells[Rnum, Cnum] as Excel.Range).Value2 != null) { dr[Cnum - 1] = (ExcelRange.Cells[Rnum, Cnum] as Excel.Range).Value2.ToString(); } } dSet.DataTable1.Rows.Add(dr); dSet.DataTable1.AcceptChanges(); } dataGridView1.DataSource = dSet.DataTable1; dataGridView1.Visible = true; ExcelWorkBook.Close(true, null, null); ExcelApp.Quit(); releaseObject(ExcelApp); releaseObject(workbooks); releaseObject(ExcelWorkBook); releaseObject(ExcelWorkSheet); releaseObject(ExcelRange); } Проблема заключается вот в этой строке: ExcelWorkBook = workbooks.Open(@"D:\\Эксель.xlsm", 0, false); Понадобилось путь к файлу засунуть в отдельную переменную. Записал: string fullPath = "D:\\Эксель.xlsm"; И после того как я вместо пути прописываю fullpath у меня Excel остается висеть в процессах. Если вернуть все как было, то есть путь напрямую, то все корректно работает. В чем тут может быть проблема? |
Сообщ.
#2
,
|
|
|
Итак решение найдено. Проблема заключалась в том что я запускал все это дело в Debug. Из за этого ссылки не освобождались. Нужно было делать это в релизе. Подробнее тут:
http://stackoverflow.com/questions/3937181...eleasecomobject http://stackoverflow.com/questions/1572867...111137#38111137 |