Форум: "Основная";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
ВнизУправление Excel через ProcessID Найти похожие ветки
← →
Krants © (2007-08-23 11:39) [0]Можно ли подключится к Excel(им. ввиду позднее связывание) через его PID.
ЗЫ: черезGetActiveOleObject
производится подкл. только к ранее запущенному Excel.Application, а хочется выборочно...
← →
Сергей М. © (2007-08-23 11:43) [1]А зачем нужен PID ?
ДЛя решения задачи он вовсе не обязателен.
← →
Krants © (2007-08-23 11:49) [2]А как можно иначе?
Просто есть задача: запущенно несколько Excel.Application, в каждом запущенно несколько Workbooks и из этого набора нужно выбрать и обработать некоторый документ...
← →
Сергей М. © (2007-08-23 11:51) [3]Пример демонстрирует получения списка интерфейсов всех существующих объектов класса Excel.Application:
function GetExcelApps: TInterfaceList;
var
rot: IRunningObjectTable;
em: IEnumMoniker;
m: IMoniker;
bc: IBindCtx;
Fetched: longint;
obj: IUnknown;
const
IID_ExcelApplication: TGUID = "{00024500-0000-0000-C000-000000000046}";
begin
Result := TInterfaceList.Create;
OleCheck(CreateBindCtx(0, bc));
OleCheck(GetRunningObjectTable(0, rot));
OleCheck(rot.EnumRunning(em));
OleCheck(em.Reset);
OleCheck(em.Next(1, m, @celtFetched));
while Fetched=1 do
try
try
OleCheck(m.BindToObject(bc, nil, IID_ExcelAppluication, obj));
Result.Add(obj);
except
end;
finally
OleCheck(em.Next(1, m, @Fetched));
end;
end;
← →
Krants © (2007-08-23 12:07) [4]что-то он глючный как-ой то...
celtFetched
???, - поменял наFetched
но все-же он не воркает(не находит ничего)...
← →
Сергей М. © (2007-08-23 12:10) [5]
> Krants © (23.08.07 12:07) [4]
Убедись, что CLSID = {00024500-0000-0000-C000-000000000046} у тебя в реестре соответствует именно объекту Excel.Application.
Если это не так, получи актуальный GUID с пом. ProgIdToClassId
← →
Сергей М. © (2007-08-23 12:12) [6]
function GetExcelApps: TInterfaceList;
var
rot: IRunningObjectTable;
em: IEnumMoniker;
m: IMoniker;
bc: IBindCtx;
Fetched: longint;
obj: IUnknown;
IID_ExcelApplication: TGUID;
begin
IID_ExcelApplication := ProgIdToClassId("Excel.Application");
Result := TInterfaceList.Create;
OleCheck(CreateBindCtx(0, bc));
OleCheck(GetRunningObjectTable(0, rot));
OleCheck(rot.EnumRunning(em));
OleCheck(em.Reset);
OleCheck(em.Next(1, m, @Fetched));
while Fetched=1 do
try
try
OleCheck(m.BindToObject(bc, nil, IID_ExcelAppluication, obj));
Result.Add(obj);
except
end;
finally
OleCheck(em.Next(1, m, @Fetched));
end;
end;
← →
Сергей М. © (2007-08-23 12:15) [7]В принципе тебе даже знать не нужно, каким экземпляром открыта нужная книга.
Список всех существующих объектов Excel.Workbook:function GetExcelApps: TInterfaceList;
var
rot: IRunningObjectTable;
em: IEnumMoniker;
m: IMoniker;
bc: IBindCtx;
Fetched: longint;
obj: IUnknown;
IID_Workbook: TGUID;
begin
IID_ExcelApplication := ProgIdToClassId("Excel.Workbook");
Result := TInterfaceList.Create;
OleCheck(CreateBindCtx(0, bc));
OleCheck(GetRunningObjectTable(0, rot));
OleCheck(rot.EnumRunning(em));
OleCheck(em.Reset);
OleCheck(em.Next(1, m, @Fetched));
while Fetched=1 do
try
try
OleCheck(m.BindToObject(bc, nil, IID_Workbook, obj));
Result.Add(obj);
except
end;
finally
OleCheck(em.Next(1, m, @Fetched));
end;
end;
← →
Krants © (2007-08-23 12:19) [8]
> Сергей М. © (23.08.07 12:12) [6]
тот-же:
{00024500-0000-0000-C000-000000000046}
{00024500-0000-0000-C000-000000000046}
GetExcelApps1.Count равен "0".
← →
Сергей М. © (2007-08-23 12:35) [9]Тогда так:
function GetWorkbooks: TInterfaceList;
var
rot: IRunningObjectTable;
em: IEnumMoniker;
m: IMoniker;
bc: IBindCtx;
Fetched: longint;
obj: IUnknown;
const IID_Workbook: TGUID = "{000208DA-0000-0000-C000-000000000046}";
begin
Result := TInterfaceList.Create;
OleCheck(CreateBindCtx(0, bc));
OleCheck(GetRunningObjectTable(0, rot));
OleCheck(rot.EnumRunning(em));
OleCheck(em.Reset);
OleCheck(em.Next(1, m, @Fetched));
while Fetched=1 do
try
try
OleCheck(m.BindToObject(bc, nil, IID_Workbook, obj));
Result.Add(obj);
except
end;
finally
OleCheck(em.Next(1, m, @Fetched));
end;
end;
← →
Krants © (2007-08-23 12:39) [10]Есть! Спасибо, очень пригодится.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c