|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Не закрываются офисные потоки (excel, word)
Здравствуйте. Обнаружил что при открытии большого количества файлов, после кода:
Excel.Application.Quit; Excel := Unassigned; процесс все равно висит в диспетчере задач и закрывается только с закрытием программы. Могу ошибаться, но подобное как-то решалось с выносом в отдельную функцию, но сейчас проверил, так не пашет, висят десятки процессов и открываются новые. Можете подсказать что с ними делать? |
#2
|
|||
|
|||
Код:
Excel.Application.Quit; |
#3
|
|||
|
|||
Я ж в теме указал что выполняю эту строчку
Единственное что забыл сказать, у меня висит еще один экземпляр экселя. Ну то есть есть основной, он в работе и открываются поочереди сотни файлов, с ними проводятся операции и они закрываются так как я показал выше. Но процессы все равно висят до закрытия программы. Последний раз редактировалось Aleklon, 21.05.2017 в 04:24. |
#4
|
|||
|
|||
Сам код:
Код:
// основной код. Открываем один файл в Excel и потом перебираем другие, добавляя в него LoadExcelFile(dir+'\main.xlsx'); fromr:=Excel.ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count+1; for i := 0 to from.Count-1 do begin AddLog(IntToStr(i+1)+'/'+IntToStr(from.Count)+' Файл '+from.Strings[i]); try Mmex(i, fromr); except break; end; end; // ну и функция. Открыли файл, добавили в основной, закрыли procedure TForm1.MMEx(i: integer; var fromr: integer); begin LoadExcelFile2(from.Strings[i]); kol:=Excel2.ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count; Excel2.Range[Excel2.Cells.Item[2, 1], Excel2.Cells.Item[kol, 23]].Select; Excel2.Selection.Copy; Excel.ActiveSheet.Cells[fromr,1].Select; Excel.ActiveSheet.Paste; fromr:=fromr+kol-1; Excel2.Application.Quit; Excel2 := Unassigned; end; // само открытие, стандартное function TForm1.LoadExcelFile2(file1: string): boolean; begin Excel2 := CreateOleObject('Excel.Application'); Excel2.Visible := false; Excel2.DisplayAlerts := false; Excel2.WorkBooks.Open(file1); Result := true; end; function TForm1.LoadExcelFile(file1: string): boolean; begin Excel := CreateOleObject('Excel.Application'); Excel.Visible := false; Excel.DisplayAlerts := false; Excel.WorkBooks.Open(file1); Result := true; end; |
#5
|
|||
|
|||
В общем заметил, если просто открыть и закрыть файл экселя, то всё нормально. Если хоть какое-то действие сделать, то процессы висят до самого конца
|