Главная страница
    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.05 c
14-1083706326
ИМХО
2004-05-05 01:32
2004.05.23
Депортиво - Порту 0:1


1-1083853109
Анонимщик
2004-05-06 18:18
2004.05.23
Критические секции


9-1073604798
Jenaxx
2004-01-09 02:33
2004.05.23
Как использовать в программе разных размеров спрайты


7-1081853748
Ded Moroz
2004-04-13 14:55
2004.05.23
USB-WebCam, S-Video


3-1082765112
Kirill
2004-04-24 04:05
2004.05.23
TpFIBDataSet не хочет показывать данные





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский