用CreateDispatch("Excel.Application")失败不知为何?

作者&投稿:骆弘 (若有异议请与网页底部的电邮联系)
使用VC 启动excel2003的方法:我使用的是if( !app.CreateDispatch("Excel.Application") )但总是失败~

COleVariant covTrue((short)TRUE),covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);

_xls_Application ExcelApp;
Workbooks wbsMyBooks;
_Workbook wbMyBook;
Worksheets wssMysheets;
_Worksheet wsMysheet;
if(!ExcelApp.CreateDispatch("Excel.Application",NULL))
{
AfxMessageBox("创建Excel服务失败!");
break;
}
wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);
wbMyBook.AttachDispatch(wbsMyBooks.Add(COleVariant(fileName)));
wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);

int shtCount = wssMysheets.GetCount();

看样子你使用的是MFC根据ActiveX的TLB生成的class. 如果是, 基类应该是COleDispatchDriver,你可以单步进入COleDispatchDriver::CreateDispatch(...)看看究竟哪一步出错了.

另外, 查查AfxOleInit(...)在APP初始化的时候调用了没有.
============================================================
如果Excel已经正确安装, 注册表里应该有:
HKEY_CLASSES_ROOT\Excel.Application
============================================================
抛开其它的代码, 只执行下面的试试.这个方法不存在其它可能, 成就是成, 不成就是不成:

CoInitialize(NULL);
CComPtrapp;
CLSID clsid;
if(CLSIDFromString(CComBSTR("Excel.Application"), &clsid)==S_OK)
{
CoCreateInstance(clsid, NULL,CLSCTX_SERVER, IID_IDispatch, (void**)&app);
}

if(app==NULL)
{
//bad
}

转载:

首先利用Visual C++ 6.0,建立一个MFC基于对话框的工程项目,共享DLL,Win32平台。工程名称ExcelTest。在主对话框中加入一个按钮,
ID IDC_EXCELTEST
Caption Test Excel
双击该按钮,增加成员函数void CExcelTestDlg::OnExceltest()。
在BOOL CExcelTestApp::InitInstance()中,dlg.DoModal();之前增加代码:
if (CoInitialize(NULL)!=0)
{
AfxMessageBox("初始化COM支持库失败!");
exit(1);
}
在return FALSE; 语句前,加入:
CoUninitialize();
选择Menu->View->ClassWizade,打开ClassWizade窗口,选择Add Class->From a type library,选择D:\Program Files\Microsoft Office\office\Excel9.OLB(D:\Program Files\Microsoft Office\是本机上Microsoft Office 2000的安装目录,可根据个人机器上的实际安装目录修改)。选择_Application、Workbooks、_Workbook、 Worksheets、_Worksheet、Range,加入新类,分别为_Application、Workbooks、_Workbook、 Worksheets、_Worksheet、Range,头文件Excel9.h,源文件Excel9.cpp。
在ExcelTestDlg.cpp文件的头部,#include "ExcelTestDlg.h"语句之下,增加 :
#include "comdef.h"
#include "Excel9.h"
在void CExcelTestDlg::OnExceltest() 函数中增加如下代码:
void CExcelTestDlg::OnExceltest()
{
_Application ExcelApp;
Workbooks wbsMyBooks;
_Workbook wbMyBook;
Worksheets wssMysheets;
_Worksheet wsMysheet;
Range rgMyRge;
//创建Excel 2000服务器(启动Excel)

if (!ExcelApp.CreateDispatch("Excel.Application",NULL))
{
AfxMessageBox("创建Excel服务失败!");
exit(1);
}
//利用模板文件建立新文档
wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);
wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t("g:\\exceltest\\MyTemplate.xlt")));
//得到Worksheets
wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);
//得到sheet1
wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
//得到全部Cells,此时,rgMyRge是cells的集合
rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);
//设置1行1列的单元的值
rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("This Is A Excel Test Program!"));
//得到所有的列
rgMyRge.AttachDispatch(wsMysheet.GetColumns(),true);
//得到第一列
rgMyRge.AttachDispatch(rgMyRge.GetItem(_variant_t((long)1),vtMissing).pdispVal,true);
//设置列宽
rgMyRge.SetColumnWidth(_variant_t((long)200));
//调用模板中预先存放的宏
ExcelApp.Run(_variant_t("CopyRow"),_variant_t((long)10),vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);
//打印预览
wbMyBook.SetSaved(true);
ExcelApp.SetVisible(true);
wbMyBook.PrintPreview(_variant_t(false));
//释放对象
rgMyRge.ReleaseDispatch();
wsMysheet.ReleaseDispatch();
wssMysheets.ReleaseDispatch();
wbMyBook.ReleaseDispatch();
wbsMyBooks.ReleaseDispatch();
ExcelApp.ReleaseDispatch();
}

Vista和office的兼容性问题,你把Vista的机器上装一个office2007试试

xcel他不具备两台电脑同时使用

看看VISTA电脑上的office按装情况,经常出现这种换机器不好使用的问题,如果VISTA兼容性没问题的话,可能是出在office上的.
而且,你最好再找一台vista的机器试试看,也可能vista的兼容性的问题.
既然在你机器上可以,大概就上述2点了,先查看office


created中文翻译,created是什么意思,created发音、用法及例句_百度知 ...
5、The current competition for jobs hascreatedsomething of a dog-eat-dog arena.───目前对工作的竞争已经创造了狗吃狗的竞争惨剧。6、The excess capacity iscreatedin the run-up to the crisis, when underpricing of risk expedites a substantial build-up in the capital stock.───此...

All men are created equal为什么不用equally
equally形容动词 All men are created equal里面的equal形容的是all men不是created

英语翻译题求救帮助?
The artworks he created were better in many aspects than those of his father's.58. 我已了解清楚了,他的结论是以事实为根据的。I've found out that his conclusion was on the basis of facts.59. 成功在于勤奋,这句话很正确。It is absolutely right that diligence leads to success ...

请问:All mankind is created equal. 句中equal 是什么词性?怎么辨别...
All mankind is created equal。你可以改写成:All mankind is equal when it is created.人天生都是平等的,所以是形容词了。

...who believed that all mankind is created ___.这个空填equal还是e...
填equally,修饰 created 。

Man is created __. A.equal B.equally C.to be equal D.equality为...
be created equal 什么是平等的 这个是短语 就跟be different from 一样 例句 Not all taxes are created equal.并非所有的税收都是平等的。Not all statutes are created equal.并非所有的法律都是平等的。Not all vitamin C products are created equal.不是所有维他命产品都一样的 ...

...acknowledged that all mankind is created ___. A.It, equal B...
A 第一空考查it作形式主语;第二空考查短语be created equal。句意:人们都认为人人生来平等。

I believe that all mankind is created equal 此句中equal在句子中做...
主语补足语,如果不是被动语态应为: creat all mankind equal

splitter is not be created
splitter is not be created 中文意思是:不创建拆分器 也可以读作:No splitter splitter 英 ['splɪtə] 美 ['splɪtə]n.分流器;劈的人,分裂机 created 英 [kri':eɪtɪd] 美 [kri':eɪtɪd]adj.创造的 v.造成;创造( create的...

5.The word"televise"is created through
高兴帮助你。请采纳,谢谢!!The word 'televise' is created through ...这句话的意思是:televise 这个词是从...中创造出来的。televise 动词 我们熟悉的电视,英文是 television

玉泉区18883785110: 用CreateDispatch("Excel.Application")失败不知为何?
占耍一清: 看看VISTA电脑上的office按装情况,经常出现这种换机器不好使用的问题,如果VISTA兼容性没问题的话,可能是出在office上的. 而且,你最好再找一台vista的机器试试看,也可能vista的兼容性的问题. 既然在你机器上可以,大概就上述2点了,先查看office

玉泉区18883785110: C++怎么创建EXCEL表 -
占耍一清: 首先把Excel报表文件保存到一个指定目录下,最好放在可执行程序的子目录下,作为模板文件.可以把报表标题、表头等设置好.这里是保存在trpt子目录下.然后建一个report目录,作为报表目标文件夹,存放填好数据的报表,可以由用户直...

玉泉区18883785110: app.CreateDispatch("Excel.Application",NULL)出现错误 -
占耍一清: 看样子你使用的是MFC根据ActiveX的TLB生成的class. 如果是, 基类应该是COleDispatchDriver,你可以单步进入COleDispatchDriver::CreateDispatch(...)

玉泉区18883785110: 使用VC操作已打开的excel表格该怎么弄? -
占耍一清: 如果文件已经打开了,那么要操作只能是关闭,无法访问的,因为该文件正在被系统占用,否则就造成冲突,感觉你的思想是不是错了.理论上是用vc来打开或者直接读取excel吧?

玉泉区18883785110: 用vc操作word,怎样才能知道打开word已经完成 -
占耍一清: if(!app.CreateDispatch(_T("Word.Application")))//启动WORD { //说明打开word失败 return; }

玉泉区18883785110: c++ 读Excel表的内容 -
占耍一清: try {Excel::_ApplicationPtr pExcelApp;HRESULT hr = pExcelApp.CreateInstance(L"Excel.Application"); ATLASSERT(SUCCEEDED(hr));pExcelApp->Visible = true; // make Excel's main window visibleExcel::_WorkbookPtr pWorkbook = ...

玉泉区18883785110: C#对Excel的操作 -
占耍一清: 一、新建EXCEL表 COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); app.CreateDispatch("EXCEL.Application"); app.SetVisible(false); //设置表可见性 app.SetDisplayFullScreen(false); //设置不全屏显示 app....

玉泉区18883785110: 我怎么能用它在C 打开Word文档 -
占耍一清: 基本步骤(1)创建)一个 MFC 的程序工程.注意:在VC中对WORD进行操作需要在MFC AppWizard - Step 2 of4中的Automaiton选项上打上勾.(2)Ctrl+W 执行 ClassWizard(本文按照 VC6 操作,示例程序是在VC6 下编写测试的).(3)Add ...

玉泉区18883785110: 用VC++生成个Word怎么使之成为当前的焦点窗口! -
占耍一清: 在app的之前,SetVisible应该是可以实现窗口激活的,你的可能是顺序和释放有问题,大致应该是这样:docs.Add(&tpl,&NewTemplate);//,&DocType,&Visble);// app.SetVisible(TRUE); //可见 位置不对,先注销掉 doc = app.GetActiveDocument()...

玉泉区18883785110: 如何调用excel的API?用VC 6.0…………
占耍一清: 这是我以前写的一段程序,可以参考. 现在没有安装Office,没法试了. 你在百度文库里找“使用MFC操作EXCEL文件”就可以找到资料. _Application app; // app is an _Application object. Workbooks books; LPDISPATCH lpDisp; // Often ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网