На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Коректное закрытие Excel
    Доброго времени суток, уважаемые знатоки. Возникла проблема при работе с Екселем.
    На форме компоненты:
    ExcelApplication: AutoConnect – false, AutoQuit – false, ConnectKind – ckNewInstance.
    ExcelWorksheet: AutoConnect – false, ConnectKind – ckRunningOrNew.
    ExcelWorkbook: AutoConnect – false, ConnectKind – ckRunningOrNew.
    Объявляем переменную для имени файла: WideString FileName;
    ExpandedWrap disabled
      //Открываем ексель
      ExcelApplication->set_Visible(true,true);
      ExcelApplication->Workbooks->Open(FileName);
      ExcelApplication->set_DisplayAlerts(false,false);
      ExcelWorkbook->ConnectTo(ExcelApplication->get_ActiveWorkbook());
      ExcelWorkbook->Activate(0);
      ExcelWorksheet->ConnectTo(ExcelWorkbook->Sheets->get_Item(TVariant(1)));
      ExcelWorksheet->Activate(0);
      //Работа с екселем
      //Закрываем ексель
      ExcelApplication->Quit();
      ExcelWorksheet->Disconnect();
      ExcelWorkbook->Disconnect();
      ExcelApplication->Disconnect();

    Проблема в том что при каждом открытии запускается новый процесс EXCEL.EXE но при закрытии не закрывается. За день программа будет открывать Ексель до 20-30 раз, это 200-300 Мб оперативки. Вопрос: Как правильно сделать так чтобы Каждый раз процесс закрывался.
    Заранее благодарен за любую помощь!

    P.S. все процессы Екселя закрываются автоматически после выхода из программы.
    Сообщение отредактировано: icemaster -
      Чего-то у меня подозрение, что надо поменять местами:

      у Вас:
      ExpandedWrap disabled
        ExcelApplication->Quit();
        ExcelWorksheet->Disconnect();
        ExcelWorkbook->Disconnect();
        ExcelApplication->Disconnect();


      Возможно так:
      ExpandedWrap disabled
        ExcelWorksheet->Disconnect();
        ExcelWorkbook->Disconnect();
        ExcelApplication->Quit();
        ExcelApplication->Disconnect();

      По крайней мере в документации такой порядок вызова...


      P.S. Странно. Проверил - у меня и так и эдак работает нормально...
      Сообщение отредактировано: Softor -
        пробовал даже такой вариант:
        ExpandedWrap disabled
          ExcelWorksheet->Disconnect();
          ExcelWorkbook->Close(TVariant(false), TNoParam(), TNoParam(),
                  LOCALE_USER_DEFAULT);
          ExcelWorkbook->Disconnect();
          ExcelApplication->Quit();
          ExcelApplication->Disconnect();

        результат тот же :(
          Странно. Проверил - у меня и так и эдак работает нормально..
            Цитата Softor @
            Странно. Проверил - у меня и так и эдак работает нормально..

            Странно, а у меня не закрывается Ексель...
            Попробуйте несколько раз, открыть-закрыть. 1 раз и у меня работает нормально...
            Сообщение отредактировано: icemaster -
              Пробовал раз 20..
              Прикреплённый файлПрикреплённый файлproject.zip (8.96 Кбайт, скачиваний: 71)
                ТЕМА ЗАКРЫТА!
                Мы оба делали все правильно! единственная проблемма состояла в том что у меня стоит Офис ХР, а компоненты Офис 2000.
                Softor, тебе огромное спс.
                P.S. протестил на 2003 офисе, работает "без чучка без задоринки" :)
                Сообщение отредактировано: icemaster -
                  Цитата icemaster

                  Softor, тебе огромное спс.

                  Да было бы за что!
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0701 ]   [ 16 queries used ]   [ Generated: 3.04.26, 10:18 GMT ]