CreateDispatch("Excel.Application")出错 没有注册类别

EdwinWY 2010-03-26 10:16:56
if (!AfxOleInit())
{
AfxMessageBox("初始化OLE出错");
return FALSE;
}
对Excel的操作
if(!app.CreateDispatch("Excel.Application", e)
{
e->ReportError(MB_OK);
return
}
在一台机子上成功,但换机子 (Excel版本一样)运行后总在CreateDispatch("Excel.Application"))这一句失败,重装office无果,错误信息"没有注册类别" 请懂的高手指点啊。。。
...全文
2404 12 打赏 收藏 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
feelingseas 2012-10-30
  • 打赏
  • 举报
回复
唉,我也过不去这啊
xyuansucarol 2012-08-29
  • 打赏
  • 举报
回复
请问楼主问题是否解决,我的是在自己的电脑上不行,换别人的电脑就可以。
EdwinWY 2010-03-30
  • 打赏
  • 举报
回复
换了 编译失败~!CreateDispatch第一个参数 不能接收L"Excel.Application", 换成_T("Excel.Application")也不成。。。
arong1234 2010-03-29
  • 打赏
  • 举报
回复

app.CreateDispatch("Excel.Application",e)
换成
app.CreateDispatch(L"Excel.Application",e)
试试。
如果成功,确保你以后任何程序字符串都用_T("Excel.Application")格式

EdwinWY 2010-03-29
  • 打赏
  • 举报
回复
感谢各位大侠 我终于找到了解决办法!
CLSID clsid;
HRESULT hr = CLSIDFromProgID(L"Excel.Application", &clsid);

if(FAILED(hr)) {
::MessageBox(NULL, "CLSIDFromProgID() 函数调用失败!", "错误", 0x10010);
return -1;
}
// 创建实例
IDispatch *pXlApp;
hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&pXlApp);
if(FAILED(hr)) {
::MessageBox(NULL, "请检查是否已经安装EXCEL!", "错误", 0x10010);
return -2;
}
用上面代码 替换
app.CreateDispatch("Excel.Application", e)
就能够成功开启EXCEL服务,但我对组件编程不是很懂 有没懂的大侠讲下原因啊 感激不尽
EdwinWY 2010-03-29
  • 打赏
  • 举报
回复
有没高手懂啊
EdwinWY 2010-03-28
  • 打赏
  • 举报
回复
楼上的 我的机子上注册表信息 和你一模一样啊 可就是失败~!
squall29485118 2010-03-27
  • 打赏
  • 举报
回复
严重关注此贴 我用的是vc6 想把数据库里面的一张表导入一个空的excel表里面 但是是用的excel 2003...无奈
arong1234 2010-03-27
  • 打赏
  • 举报
回复
我机器上的注册项:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Excel.Application]
@="Microsoft Office Excel Application"

[HKEY_CLASSES_ROOT\Excel.Application\CLSID]
@="{00024500-0000-0000-C000-000000000046}"

[HKEY_CLASSES_ROOT\Excel.Application\CurVer]
@="Excel.Application.12"

arong1234 2010-03-27
  • 打赏
  • 举报
回复
应该没有必要这么多分支的,每个excel都支持excel.application的,不需要excel.application.11之类的
[Quote=引用 2 楼 ok1234567 的回复:]
C/C++ code


BOOL CxxxApp::TestExcel()
{
//m_szExcel _Application Ex;
if( Ex.CreateDispatch(_T("Excel.Application"),NULL))
{
strcpy(m_szExcel,_T("Excel.Application"));//……
[/Quote]
arong1234 2010-03-27
  • 打赏
  • 举报
回复
即使同样版本的excel,安装选项不同,也可能使得注册表设置不一样。在不行的那个机器上,安装office使确保一下完全安装

同时使用注册表编辑器regedit看看HKEY_CLASSES_ROOT下有没有Excel.Application项,
[Quote=引用楼主 edwinwy 的回复:]
if (!AfxOleInit())
{
AfxMessageBox("初始化OLE出错");
return FALSE;
}
对Excel的操作
if(!app.CreateDispatch("Excel.Application", e)
{
e->ReportError(MB_OK);
return
}
在一台机子上成功,但换机子 (Excel版本一样)运行后总在Crea……
[/Quote]
ok1234567 2010-03-27
  • 打赏
  • 举报
回复


BOOL CxxxApp::TestExcel()
{
//m_szExcel _Application Ex;
if( Ex.CreateDispatch(_T("Excel.Application"),NULL))
{
strcpy(m_szExcel,_T("Excel.Application"));//Excel 2000
}
else if(Ex.CreateDispatch(_T("Excel.Application.11"),NULL))
{
strcpy(m_szExcel,_T("Excel.Application.11"));//Excel 2003
}
else if(Ex.CreateDispatch(_T("Excel.Application.10"),NULL))
{
strcpy(m_szExcel,_T("Excel.Application.10"));//Excel xp
}
else if(Ex.CreateDispatch(_T("Excel.Application.9"),NULL))
{
strcpy(m_szExcel,_T("Excel.Application.9"));//Excel 2000
}
else if(Ex.CreateDispatch(_T("Excel.Application.8"),NULL))
{
strcpy(m_szExcel,_T("Excel.Application.8"));//Excel 97
}
else
{
return FALSE;
}

Ex.Quit();
Ex.ReleaseDispatch();

return TRUE;
}

4,017

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧