Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.05.2017, 21:53
Aleklon Aleklon вне форума
Прохожий
 
Регистрация: 12.05.2010
Сообщения: 8
Репутация: 10
Восклицание Не закрываются офисные потоки (excel, word)

Здравствуйте. Обнаружил что при открытии большого количества файлов, после кода:

Excel.Application.Quit;
Excel := Unassigned;

процесс все равно висит в диспетчере задач и закрывается только с закрытием программы. Могу ошибаться, но подобное как-то решалось с выносом в отдельную функцию, но сейчас проверил, так не пашет, висят десятки процессов и открываются новые.
Можете подсказать что с ними делать?
Ответить с цитированием
  #2  
Старый 21.05.2017, 00:26
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
Excel.Application.Quit;
спасет отца русской демократии...
Ответить с цитированием
  #3  
Старый 21.05.2017, 04:21
Aleklon Aleklon вне форума
Прохожий
 
Регистрация: 12.05.2010
Сообщения: 8
Репутация: 10
По умолчанию

Я ж в теме указал что выполняю эту строчку

Единственное что забыл сказать, у меня висит еще один экземпляр экселя. Ну то есть есть основной, он в работе и открываются поочереди сотни файлов, с ними проводятся операции и они закрываются так как я показал выше. Но процессы все равно висят до закрытия программы.

Последний раз редактировалось Aleklon, 21.05.2017 в 04:24.
Ответить с цитированием
  #4  
Старый 21.05.2017, 04:45
Aleklon Aleklon вне форума
Прохожий
 
Регистрация: 12.05.2010
Сообщения: 8
Репутация: 10
По умолчанию

Сам код:

Код:
// основной код. Открываем один файл в 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  
Старый 21.05.2017, 13:30
Aleklon Aleklon вне форума
Прохожий
 
Регистрация: 12.05.2010
Сообщения: 8
Репутация: 10
По умолчанию

В общем заметил, если просто открыть и закрыть файл экселя, то всё нормально. Если хоть какое-то действие сделать, то процессы висят до самого конца
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter