Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.12;
Скачать: CL | DM;

Вниз

Проблема Delphi-> Excel   Найти похожие ветки 

 
Andy   (2004-08-25 18:02) [0]

Не сталкивался ли кто-нибудь со следующей проблемой:
из проги работы с бд отчет выводится в excel, где открывается существующий шаблон и туда подставляются данные из проги. Так вот после того, как отчет напечат или просто просмотрен, excel закрывается, но в процессах вистит почему-то масса excel (равно числу раз запуска проги и генерирования отчета соотв-но). Что делать и как с этим бороться, подскажите плиз.


 
VMcL ©   (2004-08-25 18:07) [1]

Excel.Quit;
?


 
Andy   (2004-08-25 18:11) [2]

2 VMcL ©

>Excel.Quit;

Где это должно быть прописано? (excel подгружается по нажатию кнопки завершения обработки данных, которые туда и надо вставлять) ...


 
Sancho ©   (2004-08-25 18:54) [3]

Может быть у тебя где-то указатель на один из интерфейсов Excel не освобождается ?


 
Andy   (2004-08-25 18:55) [4]

Может быть... А как это узнать?


 
VMcL ©   (2004-08-25 18:57) [5]

>>Andy  (25.08.04 18:55) [4]

>А как это узнать?

Есть 2 варианта:
1. Поиграть в телепатов, авось кто-то угадает.
2. Привести исходный код.


 
Flagman ©   (2004-08-25 18:57) [6]

var
 Form1: TForm;
 MY_EXCEL: Variant;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
try
if MY_EXCEL then
MY_EXCEL.Quit;
except
end;
end;


 
ASMiD   (2004-08-25 19:00) [7]

А где это все создается?
А то закрываешь один раз, а сколько раз открываешь?


 
Sancho ©   (2004-08-25 19:04) [8]

Как ты получаешь доступ к Excel используя компоненты со вкладки "Servers" или App:= CreateOLEObject("Excel.Application")?


 
Andy   (2004-08-25 19:05) [9]

Создается:

procedure TForm.BtnClick(Sender: TObject);
XLApp: Variant;
...
XLApp:= CreateOleObject("Excel.Application");
...


 
ASMiD   (2004-08-25 19:09) [10]

А не пробовал посчитать под отладчиком, сколько раз туда попадаешь?


 
Flagman ©   (2004-08-25 19:11) [11]

>> А то закрываешь один раз, а сколько раз открываешь?

А кто мешает один раз открыть, а потом править?

if not MY_EXCEL then begin
MY_EXCEL:=CreateOleObject ("Excel.Application");
MY_EXCEL.....
.............
end else begin
MY_EXCEL.....
.............
end;


 
Sancho ©   (2004-08-25 19:11) [12]

Andy   (25.08.04 19:05) [9]
Помимо XLApp у тебя должны быть еще ссылки на интерфейсы Excel к примеру

var WS: Variant;
......
WS:= XLApp.ActiveWorkSheet;
//или что-то вроде того

Всем XLApp, WS и т.д. должно быть присвоено XLApp:= Unassigned сразу после того как тебе Excel стал не нужен.


 
ASMiD   (2004-08-25 19:13) [13]

Не понял.
Ты что под одну переменную решил открыть несколько екселей?


 
Sancho ©   (2004-08-25 19:22) [14]

ASMiD   (25.08.04 19:13) [13]
Если это мне, то одна переменная - указатель на интерфейс объекта Application, другая - Worksheet. Разве можно по другому ?


 
Flagman ©   (2004-08-25 19:24) [15]

> ASMiD

В том-то и дело, что один... Просто чистить страницу, перед использованием. Или, как вариант, новые странички добавлять.


 
Sancho ©   (2004-08-25 19:31) [16]

ASMiD   (25.08.04 19:13) [13]
Извиняюсь не понял, что это не мне :-))


 
YurikGL ©   (2004-08-25 23:07) [17]

Andy   (25.08.04 18:02)  
Копия в процессах остается тогда, когда остались ссылки на ексель. В конце надо говорить Unassigned;

Вот рабочий код после которого ничего не висит.

App : Variant;
app := CreateOleObject("Excel.Application");
try
 App.Visible := True;
 App.WorkBooks.Add;
 App.activesheet.range["b1","b5"].formula:="a";
 App.ActiveSheet.Range["c1","d3"].formula:="b";
 App.ActiveSheet.Range["a1","a3"].formula:="b";
finally
 App:=Unassigned;
end;

Кстати, если есть возможность т.е. работает безглючно, то ИМХО лучше пользоваться TExcelApplication



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

Текущий архив: 2004.09.12;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
14-1093090844
able
2004-08-21 16:20
2004.09.12
Предложение.


1-1093528640
Age
2004-08-26 17:57
2004.09.12
Блокировка печати в QReport


14-1093461926
Profi
2004-08-25 23:25
2004.09.12
Издевательство


3-1092723998
HMT
2004-08-17 10:26
2004.09.12
Подскажите плз как это будет в Interbase SQL


14-1093489728
0d08h
2004-08-26 07:08
2004.09.12
JavaDoc