Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.20;
Скачать: CL | DM;

Вниз

Работа со сгенерированными из Делфи файлами Экселя   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2005.03.20;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.058 c
1-1109985318
rosl
2005-03-05 04:15
2005.03.20
hint


1-1110071971
ArchValentin
2005-03-06 04:19
2005.03.20
Запреты на запуск программ


1-1110345768
КаПиБаРа
2005-03-09 08:22
2005.03.20
Обработка ошибок или как работает Except


14-1109754578
Роман Ющенко
2005-03-02 12:09
2005.03.20
Для boriskb, Игоря Шевченко, Юрия Зотовава и т.д.


1-1109758349
Jann
2005-03-02 13:12
2005.03.20
Декомпилятор