Спасибо.
Проблему решил:
_variant_t buf; // buf[2];
buf = m_pLoadSheet->Range["D2:E5"]->Value;
SAFEARRAY *arr = buf.parray;
long uBound1,uBound2;
HRESULT hr;
hr = SafeArrayGetUBound(arr, 1, &uBound1);
if(hr!=S_OK)
TRACE("fail\n");
hr = SafeArrayGetUBound(arr, 2, &uBound2);
if(hr!=S_OK)
TRACE("fail2\n");
VARIANT *pvar;
// Получить указатель на данные.
hr = SafeArrayAccessData(arr, (void**)&pvar);
if(hr!=S_OK)
TRACE("fail2\n");
char buffer[20];
uBound1 *= uBound2;
for(int i=0;i<uBound1;i++)
{
//пров. тип
TRACE("t:%d\n",pvar[i].vt);
switch (pvar[i].vt)
{
case VT_BSTR:
TRACE("s%d: %s\n",i,(CString)(BSTR)pvar[i].bstrVal);
break;
case VT_R8:
//преобразуем число к строке
_gcvt(pvar[i].dblVal, 15, buffer);
TRACE("s%d: %s\n",i,(CString)buffer);
break;
}
}
SafeArrayUnaccessData(arr);