Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
ВнизКак правильно закрыть Excel Найти похожие ветки
← →
АлеКо (2003-06-06 08:55) [0]Привет Всезнайки!
Может кто подскажет.
Открываю книгу Excel . Считываю с нее данные и закрываю.
В книге содержатся формулы, которые пересчитываются.
Так вот, после закрытия книги процесс остается в памяти и виснит.
ExcelApp := CreateOleObject("Excel.Application");
ExcelApp.Application.EnableEvents := true;
Workbook := ExcelApp.WorkBooks.Open(ConfigFile.ReadString("path","pathzach",""),False);
.....
.....
Workbook.Saved:=true;
Sheet:=UnAssigned;
Workbook:=UnAssigned;
ExcelApp:=UnAssigned;
Вот и все.
← →
АлеКо (2003-06-06 09:16) [1]1
← →
Lord Warlock (2003-06-06 09:19) [2]ExcelApp.Quit();
← →
АлеКо (2003-06-06 09:20) [3]Не работает, а приложение выдает ошибку сервер не доступен.
← →
Lord Warlock (2003-06-06 09:25) [4]написал до того как сделал ExcelApp:=UnAssigned; ?
← →
АлеКо (2003-06-06 09:30) [5]Да конечно. Я связываю эту ошибку с тем что на листе присутствуют формулы. Для этого я специально ввожу команду
Workbook.Saved:=true;
иначе при закрытии Выдается сообщение о сахранении данных.
При работе с новым файлом который сам создаеш все проходит нормально.
Может при закрытии необходимо закрывать еще какие нибуть сопутствующие процессы.
← →
Lord Warlock (2003-06-06 09:32) [6]
> Может при закрытии необходимо закрывать еще какие нибуть
> сопутствующие процессы
Нет
Вот пример, правда с использованием раннего связывания, но не многим отличающийся от позднего:
ExcelApplication1.Connect;
try
ExcelApplication1.Visible[LOCALE_USER_DEFAULT]:=True;
ExcelApplication1.Workbooks.Add(null,LOCALE_USER_DEFAULT);
ExcelApplication1.ActiveWorkbook.RefreshAll;
finally
ExcelApplication1.ScreenUpdating[LOCALE_USER_DEFAULT]:=true;
ExcelApplication1.Quit
end;
← →
АлеКо (2003-06-06 09:36) [7]Похоже на то что просто пропадает связь с процессом, хотя все необходимые данные извлекаются из книги. Если работать с книгой больше 10 сек то связь пропадает и процесс зависает.
← →
Lord Warlock (2003-06-06 10:32) [8]да нет, Sleep(60000) - минута, все закрылось.
Но если до старта программы хотя бы один "неправильный" Excel висит в процессах, она отработает неправильно, те Excel не закроется.
Если сделать ExcelApplication1.Visible[LOCALE_USER_DEFAULT]:=False; Excel вообще не будет отображаться (если тебе не нужно его отображать).
← →
AlikZ (2003-06-08 15:11) [9]Добрый день всем! Не помню уже на память - пользовался стандартными компонентами и TWordApplication и TExcelApplication (или типа этого - не помню уже название - на закладке "Servers"). Была такая же проблема. Потом посмотрел на свой код внимательно. Посидел, подумал... Оказалось до безобразия просто. Метод Connect - делал, а Disconnect - тогда не додумался. Попробовал - и самому стыдно стало - все работало. Кстати - все фишки типа Quit - не помогают при использовании по крайней мере стандартных Delpi"йских классов - пробовал. Если не получится - вышли код (или кусок), но желательно в виде готового Application"a на мыло, посмотрю - может быть чего-нибудь и подскажу.
Для справки - у тебя должно выдавать чего-нибудь типа "RPC сервер занят" или чего-нибудь в этом духе. И возникает эта штука, когда ты выполнил отчет один раз, приложение не закрыл и пытаешься выполнить его еще раз. А ты ведь уже получил коннект к Excel"ю и пытаешься подконнектиться еще раз - закономерно, не правда ли? Да... Если ты свое приложение закрываешь, открываешь и делаешь отчет опять, у тебя все работает - не так ли?
С уважением. Всего наилучшего.
Alik.
← →
интересующийся (2003-06-09 05:43) [10]2 АлеКо
>Workbook.Saved:=true;
>Sheet:=UnAssigned;
WorkBook.Close(<parameters>, ...);
>Workbook:=UnAssigned;
>ExcelApp:=UnAssigned
← →
Mitechka (2003-06-09 10:34) [11]> иначе при закрытии Выдается сообщение о сахранении данных.
ExcelApp.DisplayAlerts:=false;
← →
firestone (2003-06-10 12:19) [12]По поводу "виснет" - у меня такая проблема была по win98, но в XP работает корректно.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c