Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема Delphi-> Excel


Andy ©   (2004-08-25 18:02:00) 

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


YurikGL   (2004-08-25 23:07:00) [1]

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


Sancho   (2004-08-25 19:31:00) [2]

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


Flagman   (2004-08-25 19:24:00) [3]

> ASMiD

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


Sancho   (2004-08-25 19:22:00) [4]

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


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

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


Sancho   (2004-08-25 19:11:00) [6]

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

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

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


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

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

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

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


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

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


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

Создается:

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


Sancho   (2004-08-25 19:04:00) [10]

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


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

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


Flagman   (2004-08-25 18:57:00) [12]

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;


VMcL   (2004-08-25 18:57:00) [13]

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

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

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


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

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


Sancho   (2004-08-25 18:54:00) [15]

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


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

2 VMcL ©

>Excel.Quit;

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


VMcL   (2004-08-25 18:07:00) [17]

Excel.Quit;
?


Наверх

Титульная страница Поиск, карта сайта Написать письмо