读书人

使用RangePtr读取excel时抛出错误

发布时间: 2013-01-05 15:20:39 作者: rapoo

使用RangePtr读取excel时抛出异常


ret = pRange->GetValue();

//Create the SAFEARRAY from the VARIANT ret.
//if(!(ret.vt & VT_ARRAY))
//return FALSE;
//COleSafeArray sa(ret);

//Determine the array's dimensions.
long lNumRows;
long lNumCols;
//sa.GetUBound(1, &lNumRows);
//sa.GetUBound(2, &lNumCols);
//lNumRows = pRange->GetRow();
lNumCols = pRange->GetCount()/10;
//lNumRows = pRange->GetColumn();
lNumRows = 10;

//Display the elements in the SAFEARRAY.
long index[2];
VARIANT val;
int r, c;
TRACE("Contents of SafeArray\n");
TRACE("=====================\n\t");
for(c=0;c<lNumCols;c++)
{
TRACE("\t\tCol %d", c);
}
TRACE("\n");
for(r=0;r<lNumRows;r++)
{
TRACE("Row %d", r);
for(c=0;c<lNumCols;c++)
{
//index[0]=r;
//index[1]=c;
//sa.GetElement(index, &val);
int temp = r*150+c;
val = pRange->GetItem(_variant_t(long(0)),_variant_t(long(temp)));
switch(val.vt)
{
case VT_R8:
{
TRACE("\t\t%1.2f", val.dblVal);
break;
}
case VT_BSTR:
{
TRACE("\t\t%s",(CString)val.bstrVal);
break;
}

case VT_EMPTY:
{
TRACE("\t\t<empty>");
break;
}
}
}


TRACE("\n");
}


以上是部分代码,主要的异常就出现在val = pRange->GetItem(_variant_t(long(0)),_variant_t(long(temp)));
我每次只能够打印出
for(c=0;c<lNumCols;c++)
{
TRACE("\t\tCol %d", c);
}
这部分的内容,然后到pRange->GetItem(0,0)就挂掉了。求解。

另一种方式COleSafeArray sa(ret);会直接异常,因为这里获得的ret值为8204 == VT_ARRAY|VT_VARIANT,用这个初始化sa时直接异常...

求解决方法,希望实现读取excel的功能。

还有个问题
pRange->GetCount();可以获得所有记录的总数,而不是行数目?
pRange->GetRow();pRange->GetColumn();这两个函数根本得不到列数目,而是得到的始终是1,其实我的行列范围设置了A1-->J150的。怎么获取列数目呢
[解决办法]
pRange->GetItem(0,0)

感觉应该是pRange->GetItem(1,1)吧。

读书人网 >VBA

热点推荐