Форум: "Основная";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
ВнизПроблема 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.035 c