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

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

Как узнать, открыт ли Excel?


}|{yk ©   (2005-02-28 17:11:00) 

Собственно.


ArchValentin   (2005-03-01 03:41:00) [1]


> aus   (28.02.05 18:30) [9]

...и сколько ты видел программ с заголовком "Microsoft Exel"? если не секрет. Вот мне только некая прога из какого-то Office'a попадалась :)))


GanibalLector   (2005-03-01 02:22:00) [2]

2 }|{yk ©
И еще,хотел поинтересоваться...
В статье http://www.delphimaster.ru/articles/frames/index.htmlВы работаете с INI на мой взгяд не корректно.Ведь не всегда есть права на запись! Тут бы try ... except не помешали .
З.Ы.Пардон,если что...


GanibalLector   (2005-03-01 02:16:00) [3]

Вариант №2(с коннектом)
 var Excels:Variant;
     n:integer;
begin
 try
   try
     Excels:=GetActiveOleObject('Excel.Application');
     Caption:='Найдено документов:'+ IntToStr(Excels.WorkBooks.Count);
     for n:=1 to Excels.WorkBooks.Count do
     begin
       if AnsiSameText('E:\Kharkov.xls',Excels.Workbooks[n].FullName) then
       begin
         // тут работаем
         Excels.WorkBooks[1].WorkSheets[1].Name:='Привет из Харькова!';
         //
       end;
     end;
   finally
     Excels:=Unassigned;
   end;
 except
   MessageDlg('Excel не найден!',mterror,[MbOk],0);
 end;
end;


GanibalLector   (2005-03-01 02:10:00) [4]

Вариант№1(облегченный)

 var Excels:Variant;
begin
 try
   try
     Excels:=GetActiveOleObject('Excel.Application');
   finally
     //значит есть ;)
     Excels:=Unassigned;
   end;
 except
   MessageDlg('Нет его тут!',mterror,[MbOk],0);
 end;
end;


Алхимик   (2005-02-28 18:40:00) [5]


> [3] wild_arg ©   (28.02.05 17:22)
> if MessageDlg('А не открыт ли у Вас Excel?', mtConfirmation,
> [mbYes,mbNo],0)=mrYes
> then
>  //открыт
> else
>  //не открыт

С точки зрения программиста, пользователь - это периферийное устройство,
вводящее набор символов в ответ на команду READ. :)


aus   (2005-02-28 18:30:00) [6]

ArchValentin ©   (28.02.05 18:10) [7]
не гони, я ведь имею право свой хелловорлд назвать 'MS Exel'


Ольга   (2005-02-28 18:25:00) [7]

А если смотреть в корень: зачем вам знать открыт ли Excel? Может нужно просто корректно закрывать "свои" Excel-и, а то можно закрыть открытый пользователем Excel, не имеющий никакого отношения к вашему приложению.


ArchValentin   (2005-02-28 18:10:00) [8]

не гони, всё можно намутить гораздо проще, перебираешь все окошки FindWindow, и проверяешь если первые n букв в названии равны 'MS Exel' то => он открыт иначе нихрена подобного.


MU   (2005-02-28 17:28:00) [9]

2 pasha_golub ©
 подойдет


Ольга   (2005-02-28 17:27:00) [10]

function GetActiveOleObject в отношении к EXCEL работает некорректно. Я и сама в этом убедилась, а потом нашла в книге "СОМ-технологии" подтверждение, авторы пишут "... по непонятным причинам"


pasha_golub   (2005-02-28 17:25:00) [11]

wild_arg ©   (28.02.05 17:22) [3]
LOL

MU   (28.02.05 17:21) [2]
ИМХО, не пойдет. Ибо откроет новое и скажет, шо есть..


wild_arg   (2005-02-28 17:22:00) [12]

if MessageDlg('А не открыт ли у Вас Excel?', mtConfirmation, [mbYes,mbNo],0)=mrYes
then
 //открыт
else
 //не открыт

:) сорьки, не удержался...


MU   (2005-02-28 17:21:00) [13]

может,
function GetActiveOleObject(const ClassName: string): IDispatch;


}|{yk   (2005-02-28 17:18:00) [14]

Можна например так
GetPidFromProcessName('EXCEL.EXE')  <> $FFFF
но это как-то неправильно...


Наверх

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