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