Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.034 c
1-1109945259
Lakshmy
2005-03-04 17:07
2005.03.20
Комбинация клавиш на компоненте


1-1109783918
oleg_SYS
2005-03-02 20:18
2005.03.20
Как присвоить типу OleVariant адресс процедуры?


1-1110366264
Dyusha
2005-03-09 14:04
2005.03.20
Одна и та же процедура каждые 5 минут


3-1108740146
Bogdan
2005-02-18 18:22
2005.03.20
Одинаковые записи


1-1110127325
Nes
2005-03-06 19:42
2005.03.20
Неактивное как активное =)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский