Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

Удаление Ole объекта   Найти похожие ветки 

 
Karlson ©   (2004-05-06 23:38) [0]

Добрый вечер! Создаю оле-объект (Excel) CreateOleObject, хочу за завершении работы с ним - удалить его из процессов. Команда Quit не дает желаемого результата.


 
Palladin ©   (2004-05-06 23:40) [1]

Он у тебя видимый?


 
Karlson ©   (2004-05-06 23:43) [2]

нет


 
Rouse_ ©   (2004-05-06 23:48) [3]

Excel.Close(False)
правда не метод для Word - не знаю сработает ли в Excel

короче почитай в MSDN Q229310


 
Palladin ©   (2004-05-06 23:48) [4]

попробуй сделать видимым, посмотри что происходит


 
Rouse_ ©   (2004-05-06 23:49) [5]

> правда не метод = правда это метод
;)


 
Karlson ©   (2004-05-06 23:53) [6]

Close для Excel не проходит вообще как метод
при видимом Excel - закрывается при Quit и остается в памяти


 
Игорь Шевченко ©   (2004-05-07 00:01) [7]

NULL после Quit присвоить OLE-объекту.

var
 E: Variant;
...
begin
 E := CreateOleObject("Excel.Application");
....
 E.Quit;
 E := NULL;
end;


 
Игорь Шевченко ©   (2004-05-07 00:06) [8]

Rouse_ ©   (06.05.04 23:48)


> короче почитай в MSDN Q229310


Почитай сам, к чему относится метод .Close в этом Q229310.

Он относится не к объекту Word, а к объекту Word.Document.


 
Karlson ©   (2004-05-07 00:07) [9]

присвоение NULL ничего не дает - процесс висит в памяти


 
Rouse_ ©   (2004-05-07 00:11) [10]

> [8] Игорь Шевченко ©   (07.05.04 00:06)
Да - невнимательно просмотрел... сори...


 
Игорь Шевченко ©   (2004-05-07 00:14) [11]

Karlson ©   (07.05.04 00:07)


> присвоение NULL ничего не дает - процесс висит в памяти


Код в студию


 
Emperor   (2004-05-07 01:51) [12]

Ничего ни висит... все закрывается...:((


 
Karlson ©   (2004-05-07 09:40) [13]

код:
MsExcel:=CreateOleObject("Excel.Application");
MsExcel.DisplayAlerts := False;
MsExcel.WorkBooks.Add;
sh := 1;
Sheet := MsExcel.WorkBooks[wb].Sheets[sh];
Sheet.Name := ...;
 try
 MsExcel.ActiveWorkbook.SaveAs(... + ".xls");
 except
 MsExcel.ActiveWorkbook.Save;
 end
 MsExcel.Quit;
 MsExcel := Null;


 
den_777   (2004-05-07 10:17) [14]

Попробуй вставить сточку
MsExcel.AutoQuit:=True
Но она может помочь, только если нет открытых Workbook


 
Игорь Шевченко ©   (2004-05-07 10:26) [15]

А если на строку c Quit поставить Breakpoint туда управление передается ?


 
Karlson ©   (2004-05-07 10:29) [16]

Игорь Шевченко ©   (07.05.04 10:26) [15]
> А если на строку c Quit поставить Breakpoint туда управление передается ?

да


 
Karlson ©   (2004-05-07 10:33) [17]

den_777   (07.05.04 10:17) [14]
> Попробуй вставить сточку
> MsExcel.AutoQuit:=True
> Но она может помочь, только если нет открытых Workbook

Этот метод вообще не проходит...


 
Курдль ©   (2004-05-07 10:38) [18]

Вот фрагмент кода, который работает давно и безглючно.
Но в нем применены не OLE-объекты а компоненты "TExcel..."


 try
   try
     excelApp:=TExcelApplication.Create(Application);
     excelApp.ConnectKind:=ckNewInstance;
     excelApp.Connect;
   except
     raise Exception.Create(""Microsoft Excel" не установлен на Вашем компъютере");
   end;
   excelWorkBook := TExcelWorkbook.Create(excelApp);
   excelWorkBook.ConnectTo(excelApp.Workbooks.Open(FName, EmptyParam, False, EmptyParam, EmptyParam,
                                                   EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                                                   EmptyParam, EmptyParam, EmptyParam, EmptyParam, xlLCID));
   excelWorkSheet:=TExcelWorkSheet.Create(excelApp);
   excelWorkSheet.ConnectTo(excelWorkBook.WorkSheets[1] as _Worksheet);
   excelApp.Visible[xlLCID]:=True;
   excelApp.WindowState[xlLCID]:=xlNormal;
   excelApp.ScreenUpdating[xlLCID]:=True;
 except
   raise
 end;

......................................

 excelWorkSheet.Disconnect;
 excelWorkSheet.Free;
 excelWorkBook.Disconnect;
 excelWorkBook.Free;
 excelApp.Quit;
 excelApp.Disconnect;
 excelApp.Free;


 
Karlson ©   (2004-05-07 10:42) [19]

Курдль ©   (07.05.04 10:38) [18]
> Вот фрагмент кода, который работает давно и безглючно.
> Но в нем применены не OLE-объекты а компоненты "TExcel..."

спасибо за код! но мне уже очень интересно как УБИТЬ этот Оле...


 
Курдль ©   (2004-05-07 10:45) [20]


> спасибо за код! но мне уже очень интересно как УБИТЬ этот
> Оле...

А! "Для чистоты экскремента!" Понимаю... Может быть позакрывать все WorkBooks перед Quit?..


 
Игорь Шевченко ©   (2004-05-07 10:58) [21]

unit main;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

type
 TForm1 = class(TForm)
   ListBox1: TListBox;
   procedure FormCreate(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation
uses
 ComObj;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
 I, J, Rows, Cols: Integer;
 E, Rng: Variant;
 S: String;
begin
 E := CreateOleObject("Excel.Application");
 E.WorkBooks.open("D:\test.xls",true);
 J := E.WorkBooks[1].WorkSheets[1].Rows.Count;
 Rng := E.WorkBooks[1].WorkSheets[1].UsedRange;
 Rows := Rng.Rows.Count;
 Cols := Rng.Columns.Count;
 ShowMessageFmt("Used rows=%d, used columns=%d", [Rows, Cols]);
 for i := 2 to J do begin
   S := E.WorkBooks[1].WorkSheets[1].Cells[i,1];
   if S = "" then
     Break;
   ListBox1.Items.Add(S);
 end;
 E.Quit;
 E := NULL;
end;

end.


Вот это тоже работает :)


 
Курдль ©   (2004-05-07 11:06) [22]


> Вот это тоже работает :)

Не-а! :)  Без добавления Variants в uses.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.03 c
14-1083610744
Pensioner
2004-05-03 22:59
2004.05.23
Откройте кладовку!


14-1083154220
csr
2004-04-28 16:10
2004.05.23
Thread creation error


1-1084181710
LAnd
2004-05-10 13:35
2004.05.23
Как найти мантису и экспоненту числа?


14-1083382986
Alexander666
2004-05-01 07:43
2004.05.23
Concrete Mathematics


1-1084277837
Sirakuz
2004-05-11 16:17
2004.05.23
Вопросы по основам наследования





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский