Я пытаюсь добавить гиперссылку на ячейку Excel с помощью автоматизации ole (C ++).
Я знаю, как добавить гиперссылку с помощью Excel VBA. Эта VBA отлично работает
With Worksheets(1)
.Hyperlinks.Add Anchor:=.Range("a5"),
_ Address:="https://example.microsoft.com",
_ ScreenTip:="Microsoft Web Site",
_ TextToDisplay:="Microsoft"
End With
Я попытался получить указатель гиперссылки. Но метод add в гиперссылке возвращает ошибку несоответствия типов
IDispatch *pHyber = NULL;
VARIANT resulthyper;
VariantInit ( & resulthyper);
hr = AutoWrap(DISPATCH_PROPERTYGET, &resulthyper, _pXlSheet, L"Hyperlinks",0);
pHyber = resulthyper.pdispVal;
CATUnicodeString cellAddress = GetCellEquivalent (3,5);
CATBSTR bstrCellAddress;
cellAddress.ConvertToBSTR(&bstrCellAddress);
IDispatch *pRange = NULL;
VARIANT resultrange;
VariantInit ( & resultrange);
VARIANT range;
VariantInit ( & range);
range.vt = VT_BSTR;
range.bstrVal = bstrCellAddress;
hr = AutoWrap(DISPATCH_PROPERTYGET, & resultrange, _pXlSheet, L"Range",1, range);
pRange = resultrange.pdispVal;
CATUnicodeString iAdd = "some text";
CATUnicodeString iScreenTip = "some text";
CATUnicodeString iTxtToDisplay = "some text";
CATBSTR bstrAddValue;
iAdd.ConvertToBSTR(&bstrAddValue);
CATBSTR bstrScreenTip;
iScreenTip.ConvertToBSTR(&bstrScreenTip);
CATBSTR bstrTxtDisplay;
iTxtToDisplay.ConvertToBSTR(&bstrTxtDisplay);
IDispatch *pXlChartObject;
VARIANT result4;
VariantInit(&result4);
VARIANT Address, ScreenTip, TextToDisplay;
Address.vt = VT_BSTR;
Address.bstrVal = bstrAddValue;
ScreenTip.vt = VT_BSTR;
ScreenTip.bstrVal = bstrScreenTip;
TextToDisplay.vt = VT_BSTR;
TextToDisplay.bstrVal = bstrTxtDisplay;
hr = AutoWrap(DISPATCH_METHOD, &result4, pHyber, L"Add", 4,TextToDisplay,ScreenTip,Address,range);
if(FAILED(hr))
{
hr = AutoWrap(DISPATCH_PROPERTYPUT, &result4, pHyber, L"Add", 4, range, Address, ScreenTip, TextToDisplay);
}
pXlChartObject = result4.pdispVal;
Я не знал, где это пошло не так. Параметры должны быть переданы в обратном порядке для функции Autowrap. Я прав?