На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Правильно закрыть Excel
    Ребят, всем привет. Использую для работы с Excel следующую конструкцию. По её завершению в процессах остается все равно висеть злосчастный EXCEL.EXE. Как его оттуда убрать?

    ExpandedWrap disabled
      var
        Excel : Variant;
       
      procedure TMainForm.LoadFromExcel();
      begin
        //создаем объект
        Excel := CreateOleObject('Excel.Application');
        //что то с ним делаем
       
        Excel.DisplayAlerts := False; //блокировка уведомлений о сохранении
        Excel.WorkBooks[1].SaveAs(ExcelFileName);
        try
          Excel.Workbooks.Close;
        except
       
        end;
       
      end;
      Цитата seska @
      По её завершению в процессах остается все равно висеть злосчастный EXCEL.EXE

      Так ты его и не закрываешь, закрываешь только одну вкладку. Вероятно, надо вызывать что-то вроде Excel.Quit
        Excel.Quit тоже не работает. Вероятно нужно что-то вроде этого, а что конкретно я к сожалению не могу найти ;(
          в DRKB -> ActiveX, COM и Другие технологии -> Работа с приложениями Microsoft Office -> Работа с Microsoft Excel -> Как зыкрыть Excel говорят что вот так

          ExpandedWrap disabled
            try  
              Ex1.Workbooks.Close(LOCALE_USER_DEFAULT);  
              Ex1.Disconnect;  
              Ex1.Quit;  
              Ex1:=nil;  
             except  
             end;
            seska, для получения результата нужно выполнить следующее:

            ExpandedWrap disabled
              var
                tmpExcel: variant;
              begin
                // создаем объект
                tmpExcel:=CreateOleObject('Excel.Application');
                // что то с ним делаем
                tmpExcel.Workbooks.Add;        // добавляем один лист в книгу
                // сохраняем полученный результат
                tmpExcel.DisplayAlerts:=false; // блокируем уведомления о сохранении
                tmpExcel.ActiveWorkbook.SaveAs(extractfilepath(application.ExeName) + '1.xls');
                tmpExcel.ActiveWorkbook.Close
              end;

            з.ы.: во вложении пример с использованием данного кода ...

            Прикреплённый файлПрикреплённый файлexcel_close.zip (1,79 Кбайт, скачиваний: 211)
              Спасибо, VahaC! Вроде процесс удаляется теперь. Только код немного видоизменил, так он не компилируется.

              ExpandedWrap disabled
                  
                  try
                    Excel.Workbooks.Close;
                  except
                  end;
                  Excel.Quit;
                  Excel := null;


              Добавлено
              andrew.virus да, тут задача чтобы Excel была глобальной переменной. Если она локальная, как у тебя, то после выхода из процедуры процесс действительно исчезает
                Есть замечательная функция Excel := Unassigned. Перед присвоением не забыть сделать Quit.
                  Excel := nil тоже вполне сработает
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,2582 ]   [ 18 queries used ]   [ Generated: 30.07.25, 20:20 GMT ]