Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Предотвратить запуск Excel. [D7]


Страницы:   1 2 3

Neket ©   (2007-05-28 15:20:00) 

Подскажите как на время работы моей программы предотвратить запуск Excel. Т.е. Моя прогрмма выгружает из БД данные и складывает их в Excel книгу у которой Visibl=false. Но если на машине запусить Exce (новый файл или уже имещийся) то данные записываются в открытый документ, а нет в тот который создал сам. Как это предотвратить?
ActiveSheet нигде не использую.


Neket   (2007-06-06 12:25:00) [1]

ошибка одновременного доступа. а не открывай один файл в 2х и более программах/потоках...

Дык в том-то и дело.... что ничего такого я не делаю. Просто как оказывается. Вся проблема в том, что у меня каждый новй файл открывается не в новом exe-шнике, а в моеём XLApp:= CreateOleObject('Excel.Application');


sniknik   (2007-06-06 12:11:00) [2]

> Ды всерано в каком топике...
так думаешь? ну значит твои ветки частенько будут удаляться как спам...

> 800AC472
ошибка одновременного доступа. а не открывай один файл в 2х и более программах/потоках... должен быть только один инстанс. (либо установить функцию одновременного доступа. не знаю как программно, не делал, но в самом екселе такое есть, распределенная работа с одним файлом. а раз есть то и сделать можно)


Neket   (2007-06-06 11:14:00) [3]

Ды всерано в каком топике...
Вот ошибка:

Raised exception class EOleException with message 'OLE error 800AC472'. Process stopped.


Котик Б   (2007-05-31 11:33:00) [4]

 ShowMessage('Не запускайте пожалуйста Excel во время работы программы');
:)


Neket   (2007-05-31 08:15:00) [5]


> XLApp.ActiveWorkbook.ActiveSheet.Cells.Item[Count+3, 8].
> Value := 'Текст2';
>
> так что все работает так, как и должно. Т.е. при открытии
> "левой" книги она становится активной и поэтому в нее все
> и пишется


Точно...
Теперь понятно.
Всем спасибо за помощь. Извините что сразу не понял :-)


> DiamondShark ©   (30.05.07 16:02) [36]
> Оставьте его. Это робот.


Я не робот :-(


DiamondShark   (2007-05-30 16:02:00) [6]

Оставьте его. Это робот.


umbra   (2007-05-30 13:06:00) [7]


> XLApp.Cells.Item[Count+3, 8].Value := 'Текст2';

эквивалентно
XLApp.ActiveWorkbook.ActiveSheet.Cells.Item[Count+3, 8].Value := 'Текст2';

так что все работает так, как и должно. Т.е. при открытии "левой" книги она становится активной и поэтому в нее все и пишется


clickmaker   (2007-05-30 12:35:00) [8]


> [33] Demon123   (30.05.07 12:30)

см. код в [30]


Demon123   (2007-05-30 12:30:00) [9]

Всем спасибо....
Посидел я. Попытался переписать код, но все по прежнему. А именно.
Если я создаю экземпляяр Excel таким образом:
XLApp:= CreateOleObject('Excel.Application');
XL:=XLApp.Workbooks.Add();


То, при открытии абсолютно "Левого" файла 1.xls, вся инфа начинает записываться в этот 1.xls, если открыть ещё один файл (к прнимеру 2.xls), то инфа начинает записываться в 2.xls. Т.е. запись начинает производиться в активную книгу которая открыта в одном и том-же экземпляре XLApp:= CreateOleObject('Excel.Application');


ASoft   (2007-05-29 11:59:00) [10]

>Neket
а у вас XLApp.ConectKind=ckNewInstance?


clickmaker   (2007-05-29 11:46:00) [11]


> [26] Сергей М. ©   (29.05.07 11:14)


function CreateOleObject(const ClassName: string): IDispatch;
var
 ClassID: TCLSID;
begin
 ClassID := ProgIDToClassID(ClassName);
 OleCheck( CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or
   CLSCTX_LOCAL_SERVER, IDispatch, Result));
end;

может, мне и правда пора за метлой, или это какой-то другой "COM"?


clickmaker   (2007-05-29 11:36:00) [12]

XLApp:= CreateOleObject('Excel.Application');
 XL:=XLApp.Workbooks.Add();
 XL.Sheets[1].Cells[3, 8].Value := 'Hello World';
 XL.Sheets[1].Cells[3, 8].Font.Bold:=True;

пишет, куда надо


umbra   (2007-05-29 11:26:00) [13]

а если сразу после создания файл сохранить под новым именем?


Игорь Шевченко   (2007-05-29 11:20:00) [14]

Странно, сколько с Excel не работаю, все пишется из программы куда надо, даже если пользователь при этом запустил десяток Excel'ей для своих нужд.

Наверное у меня программа неправильная.


homm   (2007-05-29 11:18:00) [15]

> Потому что опят работы COM.

* Потому что опыта работы с COM почти нет.

Рука в очередной раз дрогнула :)


Сергей М.   (2007-05-29 11:14:00) [16]


> homm ©   (29.05.07 10:54) [22]


Умерь пыл, здесь ты не прав)
Можно было попросту намекнуть автору, что если проблема и существует, то она легко обходится программным взаимодействием с Excel как СОМ (а не OLE) сервером.


homm   (2007-05-29 11:09:00) [17]

> ваши предложения?

Нет предложений. Потому что опят работы COM. Но через отключение DDE - гнилой костыл.
А вообще прав [16] Сергей М. ©. У автора скорее всего проблема в 17-й строке.


Neket   (2007-05-29 10:59:00) [18]


> clickmaker ©   (29.05.07 10:32) [19]
>
> > XLS - Props - Advanced
>
> XLS - Advanced - Open - Edit - Use DDE [ ]


Интересно :-)
А програмно этот вопрос возможно решить?


clickmaker   (2007-05-29 10:58:00) [19]


> [22] homm ©   (29.05.07 10:54)

ваши предложения?


homm   (2007-05-29 10:54:00) [20]

> а это уже не наши проблемы )

Капец, за что нынче мастера дают :(
Метла по тебе плачет.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо