hur.cn - 华软网

 热门搜索

求教MFC操作EXCEL的教程(老是CreateDispatch返回FALSE)

  作者:未知    来源:网络    更新时间:2014/2/25
    想实现从MFC(VC++)窗口到处数据到EXCEL中,实现功能很简单:就是把计算的结果保存起来,同时贴上两张系统图。
    


    参考的教程为:http://blog.csdn.net/shuilan0066/article/details/7936336
    也是CSDN上的一个博客文章。
    
if( !app.CreateDispatch("Excel.Application") ){  
this->MessageBox("无法创建Excel应用!");  
return;  

    

    但是每次运行到上面的位置,就进入了IF语句中了.......
    代码我直接复制的,唯一的区别就是我用的是office2010(相应的我生成的也是office2010下的EXCEL.CPP和EXCEL.H)
    


    再后来就开始搜教程,有地方提到初始化之类的问题,我都按照建议尝试了,但是没什么效果.....
    链接:http://bbs.csdn.net/topics/330181316
    这里他说找到了解决方案,但是每看懂是什么意思..
    


---华软 网友回答---
没有人么,求助啊....
---华软网友回复---
对了,我在这之前已经初始化过来,初始化的部分代码
BOOL CHandle_excelApp::InitInstance()
{
AfxEnableControlContainer();

// Standard initialization
// If you are not using these features and wish to reduce the size
//  of your final executable, you should remove from the following
//  the specific initialization routines you do not need.

if (CoInitialize( NULL )!=NULL)
{
AfxMessageBox(_T("初始化Com失败!"));
}


这里并没有报错.....
可是创建的时候却报错了。
---华软网友回复---
CreateDispatch你是在主线程执行还是在子线程执行?
---华软网友回复---
引用 3 楼 jason_wentzel 的回复:
CreateDispatch你是在主线程执行还是在子线程执行?


主线程中,我压根都没考虑多线程....

我刚才在网上下载了个实例程序,用到EXCEL操作了,发现问题依旧。。。


我在怀疑是不是电脑的问题,我刚重装的系统,装的是OFFCIE 2010官方原版(office profe plus),现在正在尝试装2003测试。

除了这方面的问题还有啥可能哦。。。
我在注册表里看了的,office安装是正常的。
---华软网友回复---
引用 4 楼 K616358281 的回复:
Quote: 引用 3 楼 jason_wentzel 的回复:

CreateDispatch你是在主线程执行还是在子线程执行?


主线程中,我压根都没考虑多线程....

我刚才在网上下载了个实例程序,用到EXCEL操作了,发现问题依旧。。。


我在怀疑是不是电脑的问题,我刚重装的系统,装的是OFFCIE 2010官方原版(office profe plus),现在正在尝试装2003测试。

除了这方面的问题还有啥可能哦。。。
我在注册表里看了的,office安装是正常的。



我现在在想,到底要不要这个功能,如果这么鸡肋,还不如就不要算了...

---华软网友回复---
快愁死了都,C++写得是真心着急。
---华软网友回复---
改成if( !app.CreateDispatch(_T("Excel.Application"))试试看,从目前你提供的代码,看不出什么问题
---华软网友回复---
我刚才换了个电脑测试了一下,环境:vc6.0 win7 office2010编译通过了。。。。
---华软网友回复---
多谢孤客天涯的指导,经过自己的摸索,发现,如果改成release调试,结果就可以正常操作EXCEL,不知道是什么原因,放在别的电脑上也没问题......
---华软网友回复---
没人回答我自己补充一点吧,这里怀疑问题出在.dll文件没有注册上,不过在release模式下调试就没有问题。
如果有人出现类似问题可以考虑进行尝试。

PS:在release模式下你的程序可能会出现一些莫名其妙的问题,而且无法设置断点进行调试,不过这些问题一般都是程序代码不严谨导致的,可以试着采用messagebox查找原因。
---华软网友回复---
我写过现成可用的Excel操作类,你可以直接拿去用。
---华软网友回复---
if( !app.CreateDispatch("Excel.Application") ){  
this->MessageBox("无法创建Excel应用!");  
return;  


在这段代码之前重新初始化一下  加入CoInitialize(NULL);就OK了      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。