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