![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Предотвратить запуск Excel. [D7]
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]> а это уже не наши проблемы )
Капец, за что нынче мастера дают :(
Метла по тебе плачет.