我是在MFC中创建excel,在执行下面一句
objRange = objSheet.get_Range(COleVariant(s),COleVariant(str));时就会出现 COledispatchException异常。不知道怎么回事,因为刚研究在MFC中运用excel,所以不是很明白,菜鸟级别,希望各位高手不吝赐教。多谢!!
objRange = objSheet.get_Range(COleVariant(s),COleVariant(str));时就会出现 COledispatchException异常。不知道怎么回事,因为刚研究在MFC中运用excel,所以不是很明白,菜鸟级别,希望各位高手不吝赐教。多谢!!
不好意思,怎么查?调试到
CATCH_ALL(e)
{
lResult = AfxProcessWndProcException(e, &pThreadState->m_lastSentMsg);
TRACE(traceAppMsg, 0, "Warning: Uncaught exception in WindowProc (returning %ld).\n",
lResult);
DELETE_EXCEPTION(e);
}
END_CATCH_ALL pThreadState->m_lastSentMsg = oldState;
return lResult;
发现lResult=1;然后不知道从什么地方得到m_strDescription
{
MessageBox(e.m_strDescription)
}类似这样,没测试过啊
我想把异常捕捉到
try{
objRange = objSheet.get_Range(COleVariant(s),COleVariant(str));
}catch(COleDispatchException e)
{
MessageBox(e.m_strDescription); }
但是运行到objRange = objSheet.get_Range(COleVariant(s),COleVariant(str));就进入CATCH ALL(e)了,没法进入我的catch(COleDispatchException e)怎么办?新手,希望不要见笑
试试插入
CATCH( CException, pEx )
{
// Simply show an error message to the user.
pEx->ReportError();
}
显示error:不允许抽象类型“CException”作为catch类型
objRange = objSheet.get_Range(COleVariant(s),COleVariant(str));
}catch(CException& e)
{
e.ReportError();
}
try{
objRange = objSheet.get_Range(COleVariant(s),COleVariant(str));
}catch(CException* e)
{
e->ReportError();
}
不知道为什么,现在如果str是动态变化的,还是没有找到为什么会这样,str也是CString,“E1”也是一个字符串,为什么用str就不对呢
这次可以进入catch,执行后,出现的提示窗口,是空的,就是说输出的错误信息是空的,这是什么错误?
{
// Free up previous VARIANT
Clear(); vt = VT_BSTR;
if (lpszSrc == NULL)
bstrVal = NULL;
else
{
bstrVal = CTempStringW(lpszSrc).AllocSysString();
}
return *this;
}const COleVariant& COleVariant::operator=(const CString& strSrc)
{
// Free up previous VARIANT
Clear(); vt = VT_BSTR;
bstrVal = strSrc.AllocSysString(); return *this;
}好像差不多
改成不知如何
objRange = objSheet.get_Range(COleVariant((LPCTSTR)s),COleVariant((LPCTSTR)str));
还是不行,会出现异常
COleVariant var2(str);
objRange = objSheet.get_Range(var1.Detach(),str.Detach());
很奇怪,因为程序中多次用到这个语句,第一个语句是:
objRange = objSheet.get_Range(COleVariant(str), varOptional);在这里没错。从第二个语句objRange = objSheet.get_Range(COleVariant(s),COleVariant(str));开始出异常的,
我按你上面的方法修改之后,第二个语句不出异常了,所以我就把后面的都改成这个格式了,结果发现后面的还是出现异常
试试下面:
COleVariant var1,var2;
var1=s;
var2=str;
objRange = objSheet.get_Range(var1.Detach(),var2.Detach());
var1=s;
var2=str;
objRange = objSheet.get_Range(var1.Detach(),var2.Detach());
或者用CComVariant试试,和你原始做法一样
#include <atlcomcli.h>