Delphi работа с excel закрыть только свой excel

Droider, а если книгу не нужно закрывать, а необходимо оставить ее для пользователя. В этом случае Excel := Unassigned; достаточно будет ?

Добавлено через 3 минуты
Mawrat исчерпывающе ответил
{Освобождение интерфейсов. Это делается через обнуление ссылок на эти интерфейсы.
Обнулить надо все ссылки на интерфейсы. Т. е., обнулить надо все соответствующие
переменные: exApp, exBooks, exBook, exSheets, exSheet. Если ссылки на интерфейсы
не обнулить, то объекты, связанные с этими интерфейсами, так и останутся в памяти.}

{Здесь следует обратить внимание на следующий момент.:

1. Если переменные exApp, exBooks, exBook, exSheets, exSheet объявлены на локальном
уровне, т. е., внутри подпрограммы — метода, процедуры или функции, то вручную можно
эти переменные не обнулять. Потому, что перед тем, как управление покинет тело
подпрограммы, такие переменные будут автоматически обнулены кодом завершения.
Такой код завершения добавляется компилятором во все подпрограммы.

2. Если переменные exApp, exBooks, exBook, exSheets, exSheet объявлены на глобальном
уровне, то такие переменные надо обнулить вручную. Обнуление следует выполнить
в момент, когда известно, что связанные объекты в программе больше не понадобятся.}

//Обнуление ссылок на интерфейсы.
VarClear(exApp); //Или так: exApp := Unassigned;
VarClear(exBooks); //Или так: exBooks := Unassigned;
VarClear(exBook); //Или так: exBook := Unassigned;
VarClear(exSheets); //Или так: exSheets := Unassigned;
VarClear(exSheet); //Или так: exSheet := Unassigned;

Добавлено через 28 секунд
В общем все понятно ))

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.


    Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
    1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
    2. Как «свернуть» программу в трей.
    3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
    4. Как прочитать список файлов, поддиректорий в директории?
    5. Как запустить программу/файл?
    … (продолжение следует) …


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


    Внимание
    Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
    Повторная попытка — 60 дней. Последующие попытки бан.
    Мат в разделе — бан на три месяца…

    >
    Правильно закрыть Excel

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему

      


    Сообщ.
    #1

    ,
    30.11.10, 17:06

      Full Member

      ***

      Рейтинг (т): 10

      Ребят, всем привет. Использую для работы с 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;


      Fr0sT



      Сообщ.
      #2

      ,
      30.11.10, 17:33

        Цитата seska @ 30.11.10, 17:06

        По её завершению в процессах остается все равно висеть злосчастный EXCEL.EXE

        Так ты его и не закрываешь, закрываешь только одну вкладку. Вероятно, надо вызывать что-то вроде Excel.Quit


        seska



        Сообщ.
        #3

        ,
        30.11.10, 17:45

          Full Member

          ***

          Рейтинг (т): 10

          Excel.Quit тоже не работает. Вероятно нужно что-то вроде этого, а что конкретно я к сожалению не могу найти ;(


          VahaC



          Сообщ.
          #4

          ,
          30.11.10, 18:39

            в 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;


            andrew.virus



            Сообщ.
            #5

            ,
            30.11.10, 18:47

              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 Кбайт, скачиваний: 161)


              seska



              Сообщ.
              #6

              ,
              30.11.10, 19:14

                Full Member

                ***

                Рейтинг (т): 10

                Спасибо, VahaC! Вроде процесс удаляется теперь. Только код немного видоизменил, так он не компилируется.

                ExpandedWrap disabled

                    try

                      Excel.Workbooks.Close;

                    except

                    end;

                    Excel.Quit;

                    Excel := null;

                Добавлено 30.11.10, 19:16
                andrew.virus да, тут задача чтобы Excel была глобальной переменной. Если она локальная, как у тебя, то после выхода из процедуры процесс действительно исчезает


                Light13



                Сообщ.
                #7

                ,
                01.12.10, 09:31

                  Есть замечательная функция Excel := Unassigned. Перед присвоением не забыть сделать Quit.


                  Fr0sT



                  Сообщ.
                  #8

                  ,
                  01.12.10, 11:23

                    Excel := nil тоже вполне сработает

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

                    0 пользователей:

                    • Предыдущая тема
                    • Delphi: Общие вопросы
                    • Следующая тема

                    Рейтинг@Mail.ru

                    [ Script execution time: 0,0772 ]   [ 18 queries used ]   [ Generated: 13.04.23, 22:37 GMT ]  

                    Would someone assist with what I’m sure is a basic error on my part please.

                    My goal is to open an Excel spreadsheet (invisibly), populate it, attach it to an email, send and close everything.

                    It is close to complete, except that Excel remains open — in the Task Manager — after the process is complete.

                    The block of code is:

                    procedure TFMain.SendEmail;
                    var
                      i, j, r: Integer;
                      vBody, vSaveVer: string;
                      vAttach: TIdAttachment;
                      vMftQty: array [1 .. 2] of Integer;
                      vQtyTot: array [1 .. 12] of Integer;
                      vNetTot: array [1 .. 12] of Real;
                      oXL, oWB, oSheet: Variant;
                    begin
                      IdMessage1.From.Address := 'sage@valid-email.co.uk';
                      IdMessage1.From.Domain := 'valid-email.co.uk';
                      IdMessage1.From.Text := 'Sage <sage@valid-email.co.uk>';
                      IdMessage1.Subject := 'Sage';
                      try
                        SQLQuery1.Close;
                        SQLQuery1.SQL.Clear;
                        SQLQuery1.SQL.Add('SELECT comp,dept,e_addr FROM acc_email WHERE dept="' +
                          EMailQuery.FieldByName('Dept').Text + '"');
                        SQLQuery1.Open;
                        while not SQLQuery1.Eof do
                        begin
                          IdMessage1.Recipients.EMailAddresses :=
                            EMailQuery.FieldByName('E_Addr').Text;
                          SQLQuery2.Close;
                          SQLQuery2.SQL.Clear;
                          SQLQuery2.SQL.Add('SELECT * FROM invoice WHERE global_dept_number="' +
                            EMailQuery.FieldByName('Dept').Text +
                            '" ORDER BY account_ref, stock_code');
                          SQLQuery2.Open;
                    
                          oXL := CreateOleObject('Excel.Application');
                          oXL.DisplayAlerts := False;
                          oWB := oXL.Workbooks.Add;
                          while not SQLQuery2.Eof do
                          begin
                            oXL.Cells[r, 1].Value := 'Code';
                            oXL.Cells[r, 2].Value := 'Description';
                            oXL.Cells[r, j * 2 + 1].Value := 'Qty';
                            oXL.Cells[r, j * 2 + 2].Value := 'Value';
                            Inc(r);
                            oWB.Worksheets.Add(After := oWB.Worksheets[oWB.Worksheets.Count]);
                            oSheet := oWB.ActiveSheet;
                            oSheet.Name := SQLQuery2.FieldByName('account_ref').Text;
                            oXL.Cells[1, j * 2 + 1].Value := 'Month';
                            r := 2;
                            SQLQuery2.Next;
                          end;
                          if oWB.Worksheets.Count > 1 then
                            oWB.Worksheets.Item['Sheet1'].Delete;
                          oWB.Worksheets[1].Select;
                          oWB.SaveAs(vSave + EMailQuery.FieldByName('Dept').Text + '.xlsx');
                          SQLQuery1.Next;
                        end;
                        try
                          if IdMessage1.Recipients.EMailAddresses <> '' then
                          begin
                            vAttach := TIdAttachmentFile.Create(IdMessage1.MessageParts,
                              vSave + EMailQuery.FieldByName('Dept').Text + '.xlsx');
                            IdSMTP1.Connect;
                            IdSMTP1.Send(IdMessage1);
                            IdMessage1.Recipients.EMailAddresses := '';
                            IdMessage1.Body.Text := '';
                          end;
                        finally
                          if IdSMTP1.Connected then
                            IdSMTP1.Disconnect;
                        end;
                      finally
                        vAttach.Free;
                        oSheet := Unassigned;
                        oWB := Unassigned;
                        oXL.Quit;
                        oXL := Unassigned;
                      end;
                    end;
                    

                    Yet Excel remains in the Task Manager and as the process runs a few times over the day, they build up in the background.

                    Could someone direct me to either the solution or how to troubleshoot the problem?


                    Форум программистов Vingrad

                    Модераторы: Poseidon, Snowy, bems, MetalFan

                    Поиск:

                    Ответ в темуСоздание новой темы
                    Создание опроса
                    > Как корректно закрыть Excel 

                    :(

                       

                    Опции темы

                    Akella
                    Дата 24.2.2004, 15:52 (ссылка)
                    | (нет голосов)
                    Загрузка ... Загрузка …




                    Быстрая цитата

                    Цитата

                    Творец
                    ****

                    Профиль
                    Группа: Модератор
                    Сообщений: 18485
                    Регистрация: 14.5.2003
                    Где: Корусант

                    Репутация: 36
                    Всего: 329

                    использую WinXP, ExcelXP, D7

                    На дополнительной модальной форме лежит компонена TExcelApplication со страницы Servers
                    Автоподключение и автовыход отключены (False)

                    Uses System, …., ExcelXP;
                    также объявлены глобальные переменные

                    WorkBook: _WorkBook;
                    Sheet: _WorkSheet;

                    В нажатия кнопки коде пишу:

                    Excel.Connect;
                    Excel.WorkBooks.Open(параметры, имя файла);

                    выполняю какие-то действия


                    Excel.DisConnect;//это не помогает
                    Excel.Quit;//это тоже не помогает

                    и то и другое вместе тоже не помогает

                    Открываю диспетчер задач — висит Excel, исчезает только после закрытия основного окна, т.е. выхода из программы.

                    Использовать CreetOleObject не хочется, т.к. много переделывать, а уже все работает идеально кроме закрытия Excel`я

                    весь код я уже выкладывал.

                    PM MAIL   Вверх
                    Cashey
                    Дата 24.2.2004, 17:00 (ссылка)
                    | (нет голосов)
                    Загрузка ... Загрузка …




                    Быстрая цитата

                    Цитата

                    Бессмертный
                    ****

                    Профиль
                    Группа: Завсегдатай
                    Сообщений: 3441
                    Регистрация: 13.11.2002
                    Где: в столице

                    Репутация: 2
                    Всего: 60

                    Выгрузи переменные WorkBook и Sheet из памяти.

                    ———————

                    библия учит любить ближнего, а камасутра обучает как именно

                    PM Jabber   Вверх
                    Albinos
                    Дата 24.2.2004, 19:03 (ссылка)
                    | (нет голосов)
                    Загрузка ... Загрузка …




                    Быстрая цитата

                    Цитата

                    Шустрый
                    *

                    Профиль
                    Группа: Участник
                    Сообщений: 64
                    Регистрация: 11.10.2003

                    Репутация: 1
                    Всего: 3

                    А чего нибудь типа Close() там нет?

                    PM MAIL   Вверх
                    Georg4
                    Дата 25.2.2004, 01:19 (ссылка)
                    | (нет голосов)
                    Загрузка ... Загрузка …




                    Быстрая цитата

                    Цитата

                    Опытный
                    **

                    Профиль
                    Группа: Участник
                    Сообщений: 961
                    Регистрация: 2.11.2002

                    Репутация: 0
                    Всего: 10

                    Отличный вопросsmile.gifsmile.gifsmile.gif
                    Нет не пугайтесь, кто бы то ни был, я не буду опять вбухивать суда всю мануала по ЕХЕЛУ, я действительно задолбался это делать, так что:
                    Закрытие Excel

                    Испольуя раннее связывание
                    if Assigned(IExcel) then begin
                    if (IExcel.Workbooks.Count > 0) and (not IExcel.Visible[xlLCID]) then
                    // не закрывайте не свои книги
                    begin
                    IExcel.WindowState[xlLCID] := TOLEEnum(Excel8_TLB.xlMinimized);
                    IExcel.Visible[xlLCID] := true;
                    Application.BringToFront;
                    end
                    else
                    IExcel.Quit;
                    IExcel := nil; // см. Хорошая практика
                    end;
                    Зачем столько кода? Зачем столько кода? Вы не запускали новый процесс, вы «законнектились» к уже существовавшему. В нем была открыта книга. Если оставить только присваивание в nil, то существовавший процесс не будет выгружен (он же существовал до запуска вашего приложения), но будет, возможно, спрятан от пользователя с его открытой книгой.
                    Используя компоненты Delphi 5
                    if Assigned(Excel) then begin
                    if (Excel.Workbooks.Count > 0) and (not Excel.Visible[xlLCID]) then
                    // не закрывайте не свои книги
                    begin
                    Excel.WindowState[xlLCID] := TOLEEnum(Excel97.xlMinimized);
                    Excel.Visible[xlLCID] := true;
                    Application.BringToFront;
                    end
                    else
                    Excel.Quit;
                    FreeAndNil(Excel);
                    end;
                    В Delphi 5 вы работаете уже не с интерфейсом напрямую, а с экземпляром класса TExcelApplcation. Это настоящий экземпляр класса, освободить который просто необходимо. Поэтому вместо присваивания в nil — FreeAndNil.
                    Используя позднее связывание
                    if not VarIsEmpty(Excel) then begin
                    if (Excel.Workbooks.Count > 0) and (not Excel.Visible) then
                    // не закрывайте не свои книги
                    begin
                    Excel.WindowState := Excel97.xlMinimized;
                    Excel.Visible := true;
                    Application.BringToFront;
                    end
                    else
                    Excel.Quit;
                    Excel := UnAssigned;
                    end;
                    Внимание — хорошая практика!
                    Процесс Excel останется в памяти, скрыто выполняясь, до тех пор, пока вы не освободите все ваши указатели на любые, использованные вами, интерфейсы Excel. Отсоедините все компоненты, присвойте всем интерфейсным переменным nil и установите все переменные типа variant в Unassigned, чтобы избежать этого.

                    Вот и все!

                    ———————

                    Никто и никогда не должен решать одну проблему дважды

                    PM MAIL ICQ   Вверх
                    Kesh
                    Дата 25.2.2004, 13:52 (ссылка)
                    | (нет голосов)
                    Загрузка ... Загрузка …




                    Быстрая цитата

                    Цитата

                    Эксперт
                    ****

                    Профиль
                    Группа: Эксперт
                    Сообщений: 2488
                    Регистрация: 31.7.2002
                    Где: Германия, Saarbrü cken

                    Репутация: 4
                    Всего: 54

                    Georg4 Ты бы весь цикл статей привел… Ибо это есть гуд…
                    По-моему «По волнам интеграции…»

                    ———————

                    user posted image

                    PM MAIL WWW ICQ Skype   Вверх
                    Cashey
                    Дата 25.2.2004, 15:44 (ссылка)
                    | (нет голосов)
                    Загрузка ... Загрузка …




                    Быстрая цитата

                    Цитата

                    Бессмертный
                    ****

                    Профиль
                    Группа: Завсегдатай
                    Сообщений: 3441
                    Регистрация: 13.11.2002
                    Где: в столице

                    Репутация: 2
                    Всего: 60

                    Georg4, все твои рекоммендации сводятся к одному Quit и выгрузка из памяти , что я и говорил.

                    По поводу статей, я и сам бы мог поделиться не малым опытом работы с екселем, но для етого хорошо было бы создать отдельный форум, что бы добро не пропало smile.gif, а главное для того, что бы этим могли воспользоваться и те кто работает с другими языками и бывает на других форумах.

                    ———————

                    библия учит любить ближнего, а камасутра обучает как именно

                    PM Jabber   Вверх



















                    Ответ в темуСоздание новой темы
                    Создание опроса
                    Правила форума «Delphi: Общие вопросы»
                    SnowyMetalFan
                    bemsPoseidon
                    Rrader

                    Запрещается!

                    1. Публиковать ссылки на вскрытые компоненты

                    2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

                    • Литературу по Дельфи обсуждаем здесь
                    • Действия модераторов можно обсудить здесь
                    • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
                    • Вопросы по реализации алгоритмов рассматриваются здесь
                    • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи


                    Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

                     

                    0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
                    0 Пользователей:
                    « Предыдущая тема | Delphi: Общие вопросы | Следующая тема »

                    Содержание

                    1. Delphi закрыть все эксель
                    2. Delphi закрыть все эксель
                    3. Клёвый код
                    4. Решаем задачи Абрамян на C. Matrix78
                    5. Решаем задачи Абрамян на C. Matrix77
                    6. Решаем задачи Абрамян на C. Matrix76
                    7. Решаем задачи Абрамян на C. Matrix75
                    8. Решаем задачи Абрамян на C. Matrix74
                    9. Решаем задачи Абрамян на C. Matrix73
                    10. Решаем задачи Абрамян на C. Matrix72
                    11. Решаем задачи Абрамян на C. Matrix71
                    12. Решаем задачи Абрамян на C. Matrix70
                    13. Решаем задачи Абрамян на C. Matrix69
                    14. Delphi закрыть все эксель

                    Delphi закрыть все эксель

                    Пожалуйста, выделяйте текст программы тегом [сode=pas] . [/сode] . Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

                    Соблюдайте общие правила форума

                    Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
                    1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
                    2. Как «свернуть» программу в трей.
                    3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
                    4. Как запустить программу/файл? (и дождаться ее завершения)
                    5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры — внедрение в удаленное адресное прстранство)
                    . (продолжение следует) .
                    Внимание:
                    Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
                    Повторная попытка — 60 дней. Последующие попытки — бан.
                    Мат в разделе — бан на три месяца.
                    Полезные ссылки:
                    MSDN Library FAQ раздела Поиск по разделу Как правильно задавать вопросы

                    Выразить свое отношение к модераторам раздела можно здесь: Rouse_, Krid

                    Источник

                    Delphi закрыть все эксель

                    У меня форма запускает через Ole Excel

                    а сама всплывает поверх его (из нее я перетаскиваю в ячейки всякую шнягу)
                    она держит application екселя до своего закрытия,
                    а при закрытии этой формы я все сохраняю и закрываю ексель

                    Так вот если в екселе не редактируется ячейка все проходит на ура
                    а ежели редактируется, то он игнорирует команды на закрытие и остается открытым.
                    Вопрос: Как бы его вывести из состояния редактирования ячейки?
                    YuriyR

                    От: Softwarer http://softwarer.ru
                    Дата: 06.07.04 11:16
                    Оценка: +1

                    Здравствуйте, yuriyr, Вы писали:

                    Y> xlap.Quit;
                    Y>Так вот если в екселе не редактируется ячейка все проходит на ура
                    Y>а ежели редактируется, то он игнорирует команды на закрытие и остается открытым.

                    Ответы на такие вопросы легче искать, сделав xlap.visible := true. В данном случае, если мне не изменяет память, Excel задает тебе вопрос о том, надо ли сохранять сделанные изменения, и, соответственно, не выходит, пока не ткнешь в Yes или No в невидимом окне Соответственно, надо явно сохранить файл.

                    От: yuriyr
                    Дата: 06.07.04 11:23
                    Оценка:

                    Здравствуйте, Softwarer, Вы писали:

                    S>Здравствуйте, yuriyr, Вы писали:

                    Y>> xlap.Quit;
                    Y>>Так вот если в екселе не редактируется ячейка все проходит на ура
                    Y>>а ежели редактируется, то он игнорирует команды на закрытие и остается открытым.

                    S>Ответы на такие вопросы легче искать, сделав xlap.visible := true. В данном случае, если мне не изменяет память, Excel задает тебе вопрос о том, надо ли сохранять сделанные изменения, и, соответственно, не выходит, пока не ткнешь в Yes или No в невидимом окне Соответственно, надо явно сохранить файл.

                    Нет первая команда xlap.DisplayAlerts := False;
                    Она отменяет все вопросы Excel на счет подтверждения сохранения
                    Но и она — самая первая — не выполняется exeption выдает каманда игнорирована

                    От: Softwarer http://softwarer.ru
                    Дата: 06.07.04 11:28
                    Оценка:

                    Здравствуйте, yuriyr, Вы писали:

                    Y>Нет первая команда xlap.DisplayAlerts := False;

                    Виноват, действительно прореагировал «на рефлексах». Прошу прощения.

                    От: akasoft
                    Дата: 06.07.04 13:36
                    Оценка:

                    Здравствуйте, yuriyr, Вы писали:

                    Y>Нет первая команда xlap.DisplayAlerts := False;
                    Y>Она отменяет все вопросы Excel на счет подтверждения сохранения

                    Я тебе конечно верю, но и ты мне поверь, иногда Excel капризничает, иногда привелегий не хватает. Попробуй с алертами, посмотри, что он там пишет и дай ему это.

                    От: yuriyr
                    Дата: 06.07.04 16:25
                    Оценка:

                    Здравствуйте, akasoft, Вы писали:

                    A>Я тебе конечно верю, но и ты мне поверь, иногда Excel капризничает, иногда привелегий не хватает. Попробуй с алертами, посмотри, что он там пишет и дай ему это.

                    Попробовал и так. Изменений нет
                    OLE error ‘Вызов был отклонен’
                    Использую ExcelXP
                    Help! Please

                    От: Slicer [Mirkwood] https://ru.linkedin.com/in/maksim-gumerov-039a701b
                    Дата: 06.07.04 19:01
                    Оценка:

                    Да не команду на закрытие он игнорирует, а любые OLE-вызовы

                    От: Григоричев Денис
                    Дата: 08.07.04 05:15
                    Оценка: 6 (1)
                    От: Slicer [Mirkwood] https://ru.linkedin.com/in/maksim-gumerov-039a701b
                    Дата: 08.07.04 09:04
                    Оценка:

                    Логично
                    Интересно, а нормальное решение есть? Без имитации клавиатурного ввода?
                    Ведь такая имитация плоха уже тем, что при этом отменяются внесенные юзверем в ячейку изменения. Сравните это с поведением самого Excel: если мы пытаемся его закрыть в момент редактирования, внесенные в ячейку изменения считаются подтвержденными.
                    Кстати, напомню, что в ряде случаев такая блокировка со стороны Excel очень логична (если, например, юзверь сидит в диалоговом окне).

                    Во многих случаях может подойти открытие данных как внедренного OLE-объекта. При этом как только пользователь переключится на другой элемент нашего окна, automation закроет эксель (в т.ч. если эксель был в режиме редактирования — но не в диалоговом окне). Правда, есть и досадный глюк (по кр. мере, в D6): если в design-time открыть (open, а не edit) объект в OLEContainer, а потом закрыть только книгу (но не эксель), будет закрыта и эксель тоже. А вот если то же проделать в рантайме — эксель останется открыта. Подробно не смотрел — может, как-то это регулируется. Ну сопровождение этого глюка — если один раз объект открыли в режиме open и закрыли, потом с ним можно делать что угодно — но в режиме просмотра в контейнере он при этом будет заштрихован серым (как если в данный момент редактируется в режиме open).

                    На выбор еще три варианта, не полностью, но решающих проблему: 1) ждем, пока Excel не согласна будет выполнить нашу команду (юзер покинет диалог или выйдет из режима редактирования), 2) блокируем пользовательский интерфейс Excel, 3) открываем данные в режиме «только для чтения» (проблема с диалогами остается).

                    Кстати, а зачем понадобилось показывать юзеру эксель и разрешать редактирование? И почему убивать Excel мы пытаемся из нашего приложения? Раз уж юзеру дали возможность полазить по таблице, так может, он сам определится, когда ему выходить?

                    От: Григоричев Денис
                    Дата: 09.07.04 05:27
                    Оценка:
                    От: Slicer [Mirkwood] https://ru.linkedin.com/in/maksim-gumerov-039a701b
                    Дата: 09.07.04 09:52
                    Оценка:

                    ГД>Ксати, есть способ убить процесс Excel, если прогу «срубили», например из TaskMan?
                    Это вряд ли хорошо — в экселе могут быть открыты чьи-то еще документы, кроме подсунутых Вами

                    От: yuriyr
                    Дата: 09.07.04 11:21
                    Оценка:

                    Сделал так
                    Не могу использовать OleContainer так как суть работы заключается в OLE перетаскивании данных из одного обьекта
                    в ексель, а сним при потере фокуса в контейнере нифига не сделаешь.

                    Источник

                    Клёвый код

                    Скриптописание и кодинг

                    Решаем задачи Абрамян на C. Matrix78

                    Matrix78. Дана матрица размера $$M times N$$. Упорядочить ее строки так, чтобы их минимальные элементы образовывали убывающую последовательность.

                    Решаем задачи Абрамян на C. Matrix77

                    Matrix77. Дана матрица размера $$M times N$$. Упорядочить ее столбцы так, чтобы их последние элементы образовывали убывающую последовательность.

                    Решаем задачи Абрамян на C. Matrix76

                    Matrix76. Дана матрица размера $$M times N$$. Упорядочить ее строки так, чтобы их первые элементы образовывали возрастающую последовательность.

                    Решаем задачи Абрамян на C. Matrix75

                    Matrix75. Дана матрица размера $$M times N$$. Элемент матрицы называется ее локальным максимумом, если он больше всех окружающих его элементов. Поменять знак всех локальных максимумов данной матрицы на противоположный. При решении допускается использовать вспомогательную матрицу.

                    Решаем задачи Абрамян на C. Matrix74

                    Matrix74. Дана матрица размера $$M times N$$. Элемент матрицы называется ее локальным минимумом, если он меньше всех окружающих его элементов. Заменить все локальные минимумы данной матрицы на нули. При решении допускается использовать вспомогательную матрицу.

                    Решаем задачи Абрамян на C. Matrix73

                    Matrix73. Дана матрица размера $$M times N$$. После последнего столбца, содержащего только отрицательные элементы, вставить столбец из нулей. Если требуемых столбцов нет, то вывести матрицу без изменений.

                    Решаем задачи Абрамян на C. Matrix72

                    Matrix72. Дана матрица размера $$M times N$$. Перед первым столбцом, содержащим только положительные элементы, вставить столбец из единиц. Если требуемых столбцов нет, то вывести матрицу без изменений.

                    Решаем задачи Абрамян на C. Matrix71

                    Matrix71. Дана матрица размера $$M times N$$. Продублировать столбец матрицы, содержащий ее минимальный элемент.

                    Решаем задачи Абрамян на C. Matrix70

                    Matrix70. Дана матрица размера $$M times N$$. Продублировать строку матрицы, содержащую ее максимальный элемент.

                    Решаем задачи Абрамян на C. Matrix69

                    Matrix69. Дана матрица размера $$M times N$$ и целое число $$K$$ $$(1 le K le $$N$$)$$. После столбца матрицы с номером $$K$$ вставить столбец из единиц.

                    Источник

                    Delphi закрыть все эксель

                    Проблема такая:
                    Запускаю Excel (с помощбю стандартных компонент Delphi 5)
                    Работаю
                    Отсоединяюсь — Excel остаётся запущеным.

                    Как мне его закрыть?

                    вот код:
                    ExcelPage_Edit.Items.Clear;

                    try
                    //Запускаем Excel
                    Excel := TExcelApplication.Create(Application);
                    Excel.ConnectKind := ckNewInstance;
                    Excel.AutoQuit := true;
                    Excel.connect;

                    // Открываем файл
                    Workbook := Excel.Workbooks.Open(self.Price.FullName, EmptyParam, EmptyParam,
                    EmptyParam, EmptyParam, EmptyParam, true, EmptyParam,
                    EmptyParam, EmptyParam, EmptyParam, EmptyParam, false, xlLCID);

                    // Читаем название всех страниц и пишем
                    // в итемы для TComboBox (ExcelPage_Edit)
                    Worksheets := Workbook.Worksheets;
                    for i:=1 to Worksheets.Count do begin
                    WorkSheet := (Worksheets.Item[i] as ExcelWorkSheet);
                    ExcelPage_Edit.Items.Add(WorkSheet.Get_Name);
                    end;

                    // Закрываем файл
                    Workbook.Close(false, EmptyParam, EmptyParam, xlLCID);
                    Workbook := nil;

                    // Теперь закрываем Excel

                    // Excel.FreeNotification(Application);
                    // Excel.Disconnect;
                    Excel.Quit;
                    // Excel.RemoveFreeNotification(Application);

                    Не работает. — Не закрывается Excel
                    не Quit, не любой из закоментированных вариантов, не их комбинции.

                    Объясните в чём тут дело, и как переделать чтоб Excel закрылся.


                    Наталия ( 2002-11-28 06:53 ) [1]


                    tga ( 2002-11-28 07:02 ) [2]

                    Наталия © Спасибо за подсказку — но она НЕ РАБОТАЕТ. Вообще выдаётся ошибка при компиляции — неопределённый идентификатор «UnAssigned» :((((


                    Наталия ( 2002-11-28 07:25 ) [3]


                    Fantasist ( 2002-11-29 00:18 ) [4]

                    Ну добавь Excel.Free.Деструктор TOleControl много чего освобождает.


                    > Деструктор TOleControl много чего освобождает

                    В смысле TOleServer.


                    AlexGreG ( 2002-12-02 08:14 ) [6]

                    x.Workbooks.Close(xlLCID);
                    x.Disconnect;
                    x.Quit;

                    хотя я даже не знаю, что за параметр такой
                    LCID, но у меня работает :

                    Если кто знает, что этот параметр значит, напишите пожалуйста.


                    AlexGreG ( 2002-12-02 08:16 ) [7]

                    сам Excel, непонятно почему, выгружается из памяти при закрытии программы.

                    (я использую компоненту ExcelApplication с закладки Servers)


                    AlexGreG ( 2002-12-02 08:40 ) [8]

                    Excel выгружается, когда компонент TExcelApplication освобождает память, т.е. при TExcelApplication.Free;


                    OlDemon ( 2002-12-02 10:21 ) [9]

                    А я использую позднее связывание и просто делаю FExcel:= nil
                    что освобождает память и убивает процесс. Может и вам поможет 🙂

                    Как вариант — по крайней мере у меня эта проблема решена именно так.

                    E := CreateOleObject(«Excel.Application»);
                    .
                    E.Quit;
                    E := 0; // вот это ОНО


                    Fantasist ( 2002-12-02 20:56 ) [11]


                    > Илайдж (02.12.02 10:42)
                    > Как вариант — по крайней мере у меня эта проблема решена
                    > именно так.

                    Это уже было выше:


                    > Наталия © (28.11.02 07:25)
                    > E:=CreateOleObject(«Excel.Application»);
                    > .
                    > E:=UnAssigned;

                    Но мы не любим позднее связывание. 🙂


                    > Excel выгружается, когда компонент TExcelApplication освобождает
                    > память, т.е. при TExcelApplication.Free;

                    И енто уже было:


                    kse ( 2002-12-09 16:23 ) [12]

                    Мой ответ немного ( :))) ) запоздал, но тем не менее, мож кто читать будет.
                    У меня так
                    ea: TExcelApplication;
                    eb: TExcelWorkbook;
                    .
                    eb.Close;
                    eb.Disconnect;
                    ea.Quit;
                    ea.Disconnect;

                    Excel закрывается без вопросов и в процессах его нет. (Иль мож я чего не понимаю)
                    Delphi 6, Win2K, Excel2000.

                    Источник

                    Понравилась статья? Поделить с друзьями:
                  • Delphi проверить открыт или нет excel
                  • Delphi выбрать весь лист в excel
                  • Delphi приложение для excel
                  • Delphi все листы excel в один лист
                  • Delphi весь текст word