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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.042 c
2-1158139691
Crazy monkey
2006-09-13 13:28
2006.10.08
Скрыть закладки в tpagecontrol


3-1154592652
snip13
2006-08-03 12:10
2006.10.08
Как правильно отобразить изменения в таблице


15-1158209832
cyborg
2006-09-14 08:57
2006.10.08
линейки памяти DDR3


2-1158914654
jjj
2006-09-22 12:44
2006.10.08
Вопрос по TBitBtn


15-1158557887
Ega23
2006-09-18 09:38
2006.10.08
С Днём рождения! 18 сентября





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