Форум: "Corba";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
ВнизРабота со сгенерированными из Делфи файлами Экселя Найти похожие ветки
← →
Karlson (2004-06-10 09:56) [0]Добрый день! Возникла следующая проблема.
Из Делфи генерю файлы Экселя, при чем программно сохраняю их - программа сама определяет имена.
После завершения операции и работы с объектом Экселя (MsExcel.Quit) (создаю объект: MsExcel:=CreateOleObject("Excel.Application")), пытаюсь открыть сгенерированные файлы,но открывается лишь остов Экселя, а сам файл - нет. При чем в процессах висит Эксель.
А после завершения работы моего проекта или если вручную киллануть процесс Экселя, работа с файлами нормальная.
← →
Clickmaker © (2004-06-10 11:03) [1]MsExcel.Quit
MsExcel := Unassigned;
← →
art-east (2004-06-10 11:06) [2]ExcelApplication.ScreenUpdating:=true
← →
Karlson (2004-06-10 11:33) [3]> Clickmaker ©
не прошло...
← →
Karlson (2004-06-10 11:36) [4]> art-east
тоже не идет.... :(
← →
art-east (2004-06-10 11:46) [5]что именно не прошло? вариант Clickmaker работает если ты хочешь убить старый экземпляр
> процессах висит Эксель
и создать новый, а мой вариант чтобы отображать файл
> открывается лишь остов Экселя, а сам файл - нет
в текущем экземпляре, убивать его при этом надо и новый создавать тоже (вместо CreateOleObject GetActiveOleObject)
← →
art-east (2004-06-10 11:48) [6]очепятка вышла, следует читать убивать его при этом не надо
← →
Karlson (2004-06-10 11:54) [7]to art-east
> что именно не прошло? вариант Clickmaker работает если ты хочешь убить старый экземпляр
не прошло - таже песня осталась - остов запускается без тела файла...
пусть хоть и убить - только бы с файлом можно было работать при работе моей проге в одном сеансе
> в текущем экземпляре, убивать его при этом не надо и новый создавать тоже (вместо CreateOleObject GetActiveOleObject)
я новый не создаю, я создаю объект один раз, генерю несколько файлов, показываю их, юзер их сам закрывает и все... работать с ними в момент запущенной проги он не может...
← →
art-east (2004-06-10 12:54) [8]всё, теперь кажись догнал
я так понимаю созданные файлы ты открываешь не в своей проге, а даблкликом например, тогда это точно ScreenUpdating
тут такая хитрость, пока у тебя Excel в инвизибле(то бишь в списке процессов он есть, а ни одного окна не видно) ему нельзя выставить это свойство. Следовательно либо ты должен освободить Excel(чтобы его не было в процессах, ибо по ассоциации файла используется уже существующий экземпляр) либо выставлять ScreenUpdating после перехода экселя в визибл(появления окна), например навеситься на его событие OnWindowActivate
← →
Karlson (2004-06-10 13:26) [9]я делаю так:
MsExcel.Visible:=true;
MsExcel.ScreenUpdating:=true;
MsExcel.DisplayAlerts := true;
MsExcel.Quit;
MsExcel := Unassigned;
то есть я визиблю через прогу - файлы сгенерированные появляются, я их закрываю руцями - по крестику, а потом открыть их уже через винду не могу....
← →
art-east (2004-06-10 13:33) [10]после
MsExcel.Quit;
MsExcel := Unassigned;
в процессах эксель есть?
в тот момент когда открыть
← →
art-east (2004-06-10 13:38) [11]остов Экселя, а сам файл - нет, попробуй перейти в экселе в полноэкранный режим(меню вид) и обратно или в редакторе VBA(Alt+F11) в ImmediateWindow(Ctrl+G) набери Application.ScreenUpdating=True и нажми Enter
после этого файл видимым становится?
← →
Karlson (2004-06-10 14:11) [12]В ПЕРВОМ СЛУЧАЕ - ЭКСЕЛЬ В ПРОЦЕССАХ ВИСИТ, А ВО ВТОРОМ - СУПЕР! В РЕЖИМЕ ВО ВЕСЬ ЭКРАН И потом в нормальном - все стало хорошо!!!
но как сказать об этом юзеру, что когда он откроет документ нужно сделать такие манипуляции?
← →
Karlson (2004-06-10 14:11) [13]В ПЕРВОМ СЛУЧАЕ - ЭКСЕЛЬ В ПРОЦЕССАХ ВИСИТ, А ВО ВТОРОМ - СУПЕР! В РЕЖИМЕ ВО ВЕСЬ ЭКРАН И потом в нормальном - все стало хорошо!!!
но как сказать об этом юзеру, что когда он откроет документ нужно сделать такие манипуляции?
← →
art-east (2004-06-10 15:50) [14]не надо говорить об этом юзеру, надо сделать обработчик события ExcelApplication.OnWindowActivate в котором ScreenUpdating выставлять в true
или же всё-таки освободить ексель, раз он висит в процессах, значит у тебя на него есть ещё ссылки в программе кроме MsExcel, им всем надо присвоить Unassigned
← →
YurikGl © (2004-06-10 20:23) [15]Может чем поможет.
Работаю через ExcelApplication. Наблюдаю такую картину, если сказать quit и не сказать disconnect.
Даже если попытаться выйти из Excel из него самого а не средствами delphi, все равно процесс висит, пока не сказать disconnect.
← →
Karlson (2004-06-11 22:33) [16]to art-east
в том-то и дело, что больше привязки к экселю в программе нет, а процесс висит себе...
← →
Topol (2004-06-12 11:55) [17]У меня была похожая проблема. Нужно освобождать все объекты кторый связаны с екселем
try
objExcel := CreateOLEObject("Excel.Application");
objExcel.Workbooks.Open(FileName);
objActiveSheet := objExcel.ActiveSheet;
objExcel.Visible:=True;
finally
objActiveSheet:=Unassigned;
objExcel:=Unassigned;
end;
Если писать просто
objExcel:=Unassigned;
ексель остается в процессах
нужно освободить и лист
objActiveSheet:=Unassigned;
← →
Karlson (2004-06-12 12:48) [18]> Topol
вот это действительно помогло!!!! спасибо!!!!
Страницы: 1 вся ветка
Форум: "Corba";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.038 c