Re[6]: Чтение данных из Excel в массив (VC++)
От: sabvi  
Дата: 19.11.05 01:14
Оценка:
Спасибо.

Проблему решил:

    _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);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.