Как получить внешний адрес Excel объекта Range через интерфейс IDispatch?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как получить внешний адрес Excel объекта Range через интерфейс IDispatch?

Сообщение Anonymous »

Следующий код возвращает список адресов, зависящих от ячейки; однако мне нужно, чтобы зависимые адреса были во внешнем формате (включая имя книги и лист).
Я пытаюсь установить для необязательного параметра «Внешний» значение True при вызове метода, но возвращенный адрес по-прежнему показывает только строку. Range.Address имеет 5 необязательных параметров, третий — «Внешний», для которого я пытаюсь установить значение True.
Есть идеи, чего мне здесь не хватает?
Есть идеи, чего мне здесь не хватает?
p>
if (vtDependencies.vt == VT_DISPATCH) {
// CONVERT TO ENUMERATOR OBJECT
hr = CComDispatchDriver(vtDependencies.pdispVal).GetPropertyByName(L"_NewEnum", &vtPropertyEnum);
IFFAILED_RETURN(hr);
CComPtr pEnum;
hr = vtPropertyEnum.pdispVal->QueryInterface(IID_IEnumVARIANT, (void**)&pEnum);
ULONG lFetch;
hr = pEnum->Next(1, &vtPropertyEnum, &lFetch);
name = L"Address";
vtPropertyEnum.pdispVal->GetIDsOfNames(IID_NULL, &name, 1, LOCALE_USER_DEFAULT, &dispID);
IFFAILED_RETURN(hr);
// ITERATE OVER THE DEPENDENCIES AND ADD THEM TO THE LIST
while (hr == S_OK && lFetch == 1) {
DISPPARAMS p = { NULL, NULL, 0, 0 };
const int argNum = 5;
param.cArgs = argNum;
VARIANT pArr[argNum];
p.rgvarg = pArr;
p.rgvarg[0].vt = VT_BOOL;
p.rgvarg[0].boolVal = false;
p.rgvarg[1].vt = VT_BOOL;
p.rgvarg[1].boolVal = false;
p.rgvarg[2].vt = VT_BOOL;
p.rgvarg[2].boolVal = false;
p.rgvarg[3].vt = VT_BOOL;
p.rgvarg[3].boolVal = true;
p.rgvarg[4].vt = VT_BOOL;
p.rgvarg[4].boolVal = false;
// INVOKE ADDRESS METHOD
hr = vtPropertyEnum.pdispVal->Invoke(
dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &p, &vtAddress, NULL, NULL);
IFFAILED_RETURN(hr);
dependencies.push_back(vtAddress.bstrVal);
hr = pEnum->Next(1, &vtPropertyEnum, &lFetch);
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... -interface
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»