powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Завершение Excel 2016
12 сообщений из 12, страница 1 из 1
Завершение Excel 2016
    #39683530
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня!
Знаю, что тема избита, написано кучу топиков и советов, но что бы я ни делал, Excel 2016 упорно остается висеть в процессах.
Как его убрать оттуда?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
ApplicationClass excelapp = new ApplicationClass();
excelapp.DisplayAlerts = false;
excelapp.Visible = false;
Workbook workBookEgov = excelapp.Workbooks.Open(exePath + "\\Templates\\egov_currency.xlsx", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Worksheet workSheetEgov = (Microsoft.Office.Interop.Excel.Worksheet)workBookEgov.Sheets.get_Item(3);

Workbook workBookCourse = excelapp.Workbooks.Open(exePath + "\\Templates\\courses.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Worksheet workSheetCourse = (Microsoft.Office.Interop.Excel.Worksheet)workBookCourse.Sheets.get_Item(1);
Range line = (Range)workSheetCourse.Rows[5];
Range xlRngNew = workSheetEgov.get_Range("A2", "G" + (curArr.Length + 1).ToString());

...
workBookEgov.SaveAs(ExpPortalFilePath + "\\eGov_currency.xlsx", Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
                Type.Missing, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing);

workBookCourse.SaveAs(ExpFilePath + "\\courses.xls", XlFileFormat.xlWorkbookNormal);

xlRngNew = null;
line = null;
workSheetCourse = null;
workSheetEgov = null;
workBookEgov.Close();
workBookCourse.Close();

excelapp.Quit();

//cleanup
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
...
Рейтинг: 0 / 0
Завершение Excel 2016
    #39683532
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
excelapp = null;
...
Рейтинг: 0 / 0
Завершение Excel 2016
    #39683533
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
excelapp = null;

смысл собирать мусор, пока у тебя живая ссылка на приложение...
...
Рейтинг: 0 / 0
Завершение Excel 2016
    #39683535
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proexcelapp = null;

смысл собирать мусор, пока у тебя живая ссылка на приложение...

ставил и это тоже - не помогает
...
Рейтинг: 0 / 0
Завершение Excel 2016
    #39683536
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть делал и вот так тоже - результата 0
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
xlRngNew = null;
                line = null;
                workSheetCourse = null;
                workSheetEgov = null;
                workBookEgov.Close(false, false, false);
                workBookCourse.Close(false, false, false);
                workBookEgov = null;
                workBookCourse = null;
                excelapp.Quit();
                excelapp = null;

                //cleanup
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
...
Рейтинг: 0 / 0
Завершение Excel 2016
    #39683537
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну отсеки лишнее, оставь только создание приложения и закрытие. Сделай Visible=true, посмотри что происходит
...
Рейтинг: 0 / 0
Завершение Excel 2016
    #39683538
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marshal.ReleaseComObject
...
Рейтинг: 0 / 0
Завершение Excel 2016
    #39683540
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилMarshal.ReleaseComObject

их тоже ставил :) но об этой операции очень много споров нужно ли реально их ставить или нет.

https://stackoverflow.com/a/38111137
...
Рейтинг: 0 / 0
Завершение Excel 2016
    #39683545
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще можно хардкорно. Грохнуть процесс excel.exe через TerminateProcess
Правда при этом закроются и другие документы экселя, если их открыл пользователь.
...
Рейтинг: 0 / 0
Завершение Excel 2016
    #39683581
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще можно попробовать сделать вызов
Код: c#
1.
2.
[DllImport("ole32.dll")]
static extern void CoFreeUnusedLibraries();


(помнится, у меня как-то были проблемы с выгрузкой акробатовского axAcroPDFLib - вышеприведенное помогло).
...
Рейтинг: 0 / 0
Завершение Excel 2016
    #39710872
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Методом проб, ошибок и интернета получен данный код, может кому понадобиться
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
ApplicationClass excelapp = null;
Workbook workBook;
Worksheet workSheetTR;
excelapp = new ApplicationClass();
workBook = excelapp.Workbooks.Open(filename, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
	Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

workSheetTR = (Microsoft.Office.Interop.Excel.Worksheet)workBook.Sheets.get_Item(1);
workSheetTR.Activate();
.
.
.
NAR(workSheetTR);
workBook.Close(false, Type.Missing, Type.Missing);
NAR(workBook);
excelapp.Quit();
NAR(excelapp);
GC.Collect();

...

private static void NAR(object o)
{
	try
	{
		System.Runtime.InteropServices.Marshal.FinalReleaseComObject(o);
	}
	catch { }
	finally
	{
		o = null;
	}
}



Причем, если создание и работа с файлом идет в отдельном классе, например Excel.cs, то в основном классе, после вызова метода работы с Екселем, надо также делать GC.Collect()
...
Рейтинг: 0 / 0
Завершение Excel 2016
    #39713910
Фотография savosin_sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchikМетодом проб, ошибок и интернета получен данный код, может кому понадобиться
...
Причем, если создание и работа с файлом идет в отдельном классе, например Excel.cs, то в основном классе, после вызова метода работы с Екселем, надо также делать GC.Collect()

Спасибо, полезная инфа! Правда, не на 100%, но теперь следов Excel в Task Manager стало значительно меньше.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Завершение Excel 2016
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]