Следующий код возвращает список адресов, зависящих от ячейки; однако мне нужно, чтобы зависимые адреса были во внешнем формате (включая имя книги и лист).
Я пытаюсь установить для необязательного параметра «Внешний» значение 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
Как получить внешний адрес Excel объекта Range через интерфейс IDispatch? ⇐ C++
Программы на C++. Форум разработчиков
1729796252
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);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79123287/how-to-get-excel-external-address-of-range-object-through-idispatch-interface[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия