Форум: "Основная";
Текущий архив: 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