![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема 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;
?