Текущий архив: 2006.10.08;
Скачать: CL | DM;
ВнизExcel создал, а как убить? Найти похожие ветки
← →
Juju (2006-09-23 08:50) [0]Создаю Excel процедурой:
procedure CreateExcel;
var
Excel:Variant;
begin
Excel := CreateOleObject("Excel.Application");
Excel.Visible := TRUE;
Excel.Workbooks.Add(-4167);
end;
А как закрыть (убить) его?
Спсибо.
← →
Palladin © (2006-09-23 10:37) [1]Excel.Quit;
← →
Juju (2006-09-23 12:23) [2]Дело в том, что я так пробовал - выдает ошибку:
EVariantInvalidOpError with message Invalid Variant Operation
← →
Palladin © (2006-09-23 12:28) [3]ты не правильно пробовал
procedure CreateExcel;
var
Excel:Variant;
begin
Excel := CreateOleObject("Excel.Application");
Excel.Visible := TRUE;
Excel.Workbooks.Add(-4167);
Ecxel.Quit;
end;
← →
Juju (2006-09-23 13:19) [4]Пробовал я так:
procedure CreateExcel(Mode:Integer);
var Excel:Variant;
begin
case Mode of
0:begin
Excel := CreateOleObject("Excel.Application");
Excel.Visible := TRUE;
Excel.Workbooks.Add(-4167);
end;
1:Excel.Quit;
end;
end;
Т.е. при загрузке программы создаем Excel при помощи CreateExcel(0);
А при закрытии программы уничтожаем - CreateExcel(1);
← →
Palladin © (2006-09-23 13:51) [5]гениально... в орешник
← →
SergP © (2006-09-23 14:02) [6]> [4] Juju (23.09.06 13:19)
Супер!!!
← →
YurikGL © (2006-09-23 17:47) [7]попробуй Excel:=unassigned...
а то у тебя процесс excel в менджере процессов останется
← →
SergP © (2006-09-23 18:59) [8]> [4] Juju (23.09.06 13:19)
>
> Т.е. при загрузке программы создаем Excel при помощи CreateExcel(0)
> ;
Ну создаем.. А зачем? Какой смысл в таком создании, если после создания ссылку сразу же теряем?
> А при закрытии программы уничтожаем - CreateExcel(1);
Чего уничтожаем? Ничего там у тебя не уничтожается, а делается хрен знает что с хрен знает чем.
← →
default © (2006-09-23 19:11) [9]орех бесспорный
← →
Juju (2006-09-23 20:36) [10]Не знаю что такое орех и орешник... думаю, что затупил я конкретно.
А тебе SergP огромное спасибо за объяснение. Весь подтекст понят и код исправлен. Теперь работает вроде:
видимость varExcel:Variant; вынес в начало модуля
Получилось так:
...
var Excel:Variant;
...
procedure CreateExcel(Mode:Integer);
begin
case Mode of
0:begin
Excel := CreateOleObject("Excel.Application");
Excel.Visible := TRUE;
Excel.Workbooks.Add(-4167);
end;
1:Excel.Quit;
end;
end;
Ну ведь работает... или снова неправильно реализовано? Если "ОРЕХ" - то объясните что такое орех и почему...
Palladin-спасибо за оперативность и терпение
SergP-спасибо, за описание, которое мне помогло.
← →
SergP © (2006-09-23 21:05) [11]
> Не знаю что такое орех и орешник...
Орешник - это здесь:
http://www.delphimaster.ru/nuts/nuts.html
и в нем собраны орехи
> Ну ведь работает... или снова неправильно реализовано? Если
> "ОРЕХ" - то объясните что такое орех и почему...
На этот раз работать должно. Это уже не орех, но я бы так не делал.
Во первых: Непонятно зачем делать Excel.Quit, если ты сделал Excel.Visible := TRUE;
ведь в этом случае пользователь сам может закрыть Excel, к тому же если он его закрыл вручную, то при выполнении Quit опять можешь получить исключение.
Во-вторых: Если ты один раз "создашь Excel" а потом не закрыв его сделаешь это повторно, то создашь "еще один Excel", а ссылку на первый потеряешь...
← →
SergP © (2006-09-23 21:14) [12]Я обычно если работаю с "видимым экселем", то не закрываю его, так как это может сделать сам пользователь.
А если приходится делать какие-то операции с невидимым экселем, после окончания которых делать эксель видимым (просто в таком случае работает намного быстрее), то делаю так:
procedure ...;
var
Excel:variant;
begin
Excel:=CreateOleObject("Excel.Application");
try
Excel.Workbooks.Add;
...
// Выполняем нужные операции с "невидимым Экселем"
...
Excel.visible:=true; // Делаем его "видимым"
except
// Если в процессе возникло исключение,
// то чтобы эксель не торчал зря в процессах, закрываем его.
Excel.Quit;
end;
end;
← →
default © (2006-09-23 23:51) [13]Juju (23.09.06 20:36) [10]
чтобы закрыть excel приложение и чтобы ничего после этого не висело в памяти нужно делать
Excel.Quit;
VarClear(Excel);
когда юзер закрывает excel крестиком это тоже что и Excel.Quit и поскольку
VarClear(Excel); не было будет в памяти висеть фигня всякая
← →
Palladin © (2006-09-24 09:34) [14]+ еще иногда очень пользно Excel.Interactive:=False
← →
Juju (2006-09-24 10:43) [15]Ребята... а какой вариант создания отчетов более рациональный?:
1)
При старте программы создаем Excel.
При выходе из программы - убиваем Excel.
2)
При конкретной надобности. Например по кнопке "Создать отчет",
В начале этой процедуры создаем Excel.
Выполняем необходимые действия (из базы заполняем документ).
При выходе из процедуры убиваем Excel.
← →
Palladin © (2006-09-24 10:55) [16]а по этому поводу рекомендую скачать компонент на моей странице и разобраться в нем
← →
Juju (2006-09-24 11:09) [17]SergP - спасибо за ссылку на орешник. Воскресное утро - проведено в слезах! Неужели мой код (тот что первый) всех тоже не слабо потешил?...
Palladin - спасибо, скачал, начинаю разбираться.
← →
YurikGL © (2006-09-24 13:20) [18]
> Ребята... а какой вариант создания отчетов более рациональный?
> :
> 1)
> При старте программы создаем Excel.
> При выходе из программы - убиваем Excel.
>
> 2)
> При конкретной надобности. Например по кнопке "Создать отчет",
>
> В начале этой процедуры создаем Excel.
> Выполняем необходимые действия (из базы заполняем документ).
>
> При выходе из процедуры убиваем Excel.
Более приемлем - 2
Страницы: 1 вся ветка
Текущий архив: 2006.10.08;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.04 c