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 нигде не использую.


clickmaker   (2007-05-29 10:52:00) [21]


> [20] homm ©   (29.05.07 10:45)

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


homm   (2007-05-29 10:45:00) [22]

> [18] clickmaker ©

А что, пользователям всем тоже снимать?


clickmaker   (2007-05-29 10:32:00) [23]


> XLS - Props - Advanced

XLS - Advanced - Open - Edit - Use DDE [ ]


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


> [17] Neket   (29.05.07 10:17)

Explorer - Tools - Folder Options - File Types - XLS - Props - Advanced сними галку Use DDE
Тогда каждый xls будет стартовать свой excel.exe


Neket   (2007-05-29 10:17:00) [25]

Я сам не пойму....
Вот кусок кода.
Вот так создается новый экземпляр:
XLApp:= CreateOleObject('Excel.Application');
XL:=XLApp.Workbooks.Add();
XLApp.Workbooks[1].WorkSheets[1].Name:=Diap+' â '+RegName1;
-----------
А вот одна из процедур
procedure MakeXl.Legenda(XLApp:Variant);
begin
Form1.Label1.Caption:='Текст1';
Form1.ProgressBar1.Min:=0;
Form1.ProgressBar1.Max:=10;
Form1.ProgressBar2.Min:=0;
Form1.ProgressBar2.Max:=10;
Form1.ProgressBar1.Position:=0;
Form1.ProgressBar2.Position:=0;
XLApp.Cells.Item[Count+3, 8].Value := 'Текст2';
XLApp.Cells.Item[Count+3, 8].Font.Bold:=True;
XLApp.Cells.Item[Count+4, 8].Value:= '47';
XLApp.Cells.Item[Count+4, 9].Value:= '48';
XLApp.Cells.Item[Count+4, 10].Value:= '49';
XLApp.Cells.Item[Count+4, 11].Value:= '50';
XLApp.Cells.Item[Count+4, 12].value:='Текст3';
XLApp.Range['H'+Inttostr(count+4),'K'+Inttostr(count+4)].Select;
XLApp.selection.Font.Bold:=True;
XLApp.selection.Borders.Weight:=3;
XLApp.selection.Orientation:=xlUpward;
XLApp.Cells.Item[Count+6, 8].Value:= '47';
XLApp.Cells.Item[Count+6, 9].Value:= '48';
XLApp.Cells.Item[Count+6, 10].Value:= '49';
XLApp.Cells.Item[Count+6, 11].Value:= '50';
XLApp.Cells.Item[Count+6, 12].value:='Текст1';
XLApp.Range['H'+Inttostr(count+6),'K'+Inttostr(count+6)].Select;
XLApp.selection.Borders.Weight:=2;
XLApp.selection.Interior.Color:=ClMyGreen;
//---
Form1.ProgressBar1.Position:=10;
Form1.ProgressBar2.Position:=10;
end;


Сергей М.   (2007-05-29 10:09:00) [26]


> Нее точнее он то стартует по всей видимости новый экземпляр


Так по идеологии и должно быть.


> в моеё случае почему-то вывод данных осущствляется в этот
> новый экземпляр


Не верю ..

У тебя свой собственный XLApp-объект, у этого объекта свой собственный объект - активный лист. С объектами, созданными юзером, твои объекты никак не должны пересекаться ...

Что-то ты тут путаешь ..


Neket   (2007-05-29 10:06:00) [27]


> Нее точнее он то стартует по всей видимости новый экземпляр

Забираю свои слова обратно.... :-)
Специально посмотрел диспетчер задачь... Экземпляр один (и тот же)


homm   (2007-05-29 10:04:00) [28]

> [11] Сергей М. ©   (29.05.07 09:48)
> > Neket   (29.05.07 09:36) [10]
> Т.е. ты утверждаешь, что юзер в такой ситуации стартует
> не новый экз-р Excel-приложения, а работает с уже существующей
> копией, созданной тобой программно ?


Сергей, Вы что, читать разучились? Человек уже 4-й раз одно и то-же Вам толдычит.
Он пишет все в свою копию, скрытую, все хоршо. Процесс записи видим продолжительные. И если во время этого процесса пользователь запускает приложение Эксель, то программа начинает писать уже в нее, а не во вновь созданую копию.


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

Нее точнее он то стартует по всей видимости новый экземпляр, но в моеё случае почему-то вывод данных осущствляется в этот новый экземпляр...
Вот я и решил пойти по пути наименьшего сопротивления и запретить на время формирование отчета запуск Excel


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

Получается что так и есть....


Сергей М.   (2007-05-29 09:48:00) [31]


> Neket   (29.05.07 09:36) [10]


Т.е. ты утверждаешь, что юзер в такой ситуации стартует не новый экз-р Excel-приложения, а работает с уже существующей копией, созданной тобой программно ?


Neket   (2007-05-29 09:36:00) [32]

Дык в том-то и дело... Что если
XLApp:= CreateOleObject('Excel.Application');
XL:=XLApp.Workbooks.Add();
и при этом
XLApp.Visible:=false;

то если юзер отрывает вновь созданный документ
моя XL мало того что становиться видимой так ещё и данные пишуться во вновь созданную книгу а не в ту которую я програмно создал.


Сергей М.   (2007-05-29 09:13:00) [33]


> Neket   (29.05.07 08:54) [7]


> Потому как в этом случае


В каком "таком случае" ?!

Пользователь просто запустил "ручками" еще одну копию Excel и сидит себе покуривает, ничего никуда не "пишет". Ни про какие тайные пассы с первой копией Excel'а, которые твоя программа в этот момент осуществляет, пользователь знать не знает.

?


ЮЮ   (2007-05-29 09:01:00) [34]

> [3] Neket   (28.05.07 17:06)
> XLApp.Cells.Item[Count+3, 8].Value := 'Hello World';
> XLApp.Cells.Item[Count+3, 8].Font.Bold:=True;



> [7] Neket   (29.05.07 08:54)
> XL.Cells.Item[Count+3, 8].Value := 'Hello World';
> XL.Cells.Item[Count+3, 8].Font.Bold:=True;


И во втором случае тоже?


Neket   (2007-05-29 08:54:00) [35]

Потому как в этом случае данные пишутся не в
XLApp:= CreateOleObject('Excel.Application');
XL:=XLApp.Workbooks.Add();
XL.Cells.Item[Count+3, 8].Value := 'Hello World';
XL.Cells.Item[Count+3, 8].Font.Bold:=True;

а в этот, вновь созданный и открытый докуент


Сергей М.   (2007-05-29 08:50:00) [36]


> Neket   (28.05.07 17:06) [3]


> Пользователем в ручную


Почему ты хочешь ограничить пользователя в праве запустить еще одну копию Excel ?


Neket   (2007-05-29 08:39:00) [37]

Долго изучал

> Amoeba ©   (28.05.07 17:14) [4]
> http://www.delphikingdom.com/asp/viewitem.asp?catalogid=249


Но того что мне необходимо так и не нашел... кто  может подсказать?


Amoeba   (2007-05-28 17:14:00) [38]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=249


Neket   (2007-05-28 17:06:00) [39]

2 Сергей М. : Пользователем в ручную.
2 DrPass : Что значит цеплять первую открытую?
Я создаю книигу так
XLApp:= CreateOleObject('Excel.Application');
XL:=XLApp.Workbooks.Add();
и пишу в неё так
XLApp.Cells.Item[Count+3, 8].Value := 'Hello World';
XLApp.Cells.Item[Count+3, 8].Font.Bold:=True;


DrPass   (2007-05-28 16:10:00) [40]


> то данные записываются в открытый документ, а нет в тот
> который создал сам. Как это предотвратить?

Необязательно это делать анальным способом. Можно ведь просто принудительно создать новую рабочую книгу, а не цеплять первую открытую, и выгружать в нее.


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

Наверх

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