Как назначить гиперссылку для ячеек Excel с помощью автоматизации OLE (C ++)? - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь добавить гиперссылку на ячейку 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. Я прав?

...