![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте. Обнаружил что при открытии большого количества файлов, после кода:
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
|
|||
|
|||
|
В общем заметил, если просто открыть и закрыть файл экселя, то всё нормально. Если хоть какое-то действие сделать, то процессы висят до самого конца
|