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

用CreateDispatch("Excel.Application")失败不知为何?,第1张

转载:
首先利用Visual C++ 60,建立一个MFC基于对话框的工程项目,共享DLL,Win32平台。工程名称ExcelTest。在主对话框中加入一个按钮,
ID IDC_EXCELTEST
Caption Test Excel
双击该按钮,增加成员函数void CExcelTestDlg::OnExceltest()。
在BOOL CExcelTestApp::InitInstance()中,dlgDoModal();之前增加代码:
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\Excel9OLB(D:\Program Files\Microsoft Office\是本机上Microsoft Office 2000的安装目录,可根据个人机器上的实际安装目录修改)。选择_Application、Workbooks、_Workbook、 Worksheets、_Worksheet、Range,加入新类,分别为_Application、Workbooks、_Workbook、 Worksheets、_Worksheet、Range,头文件Excel9h,源文件Excel9cpp。
在ExcelTestDlgcpp文件的头部,#include "ExcelTestDlgh"语句之下,增加 :
#include "comdefh"
#include "Excel9h"
在void CExcelTestDlg::OnExceltest() 函数中增加如下代码:
void CExcelTestDlg::OnExceltest()
{
_Application ExcelApp;
Workbooks wbsMyBooks;
_Workbook wbMyBook;
Worksheets wssMysheets;
_Worksheet wsMysheet;
Range rgMyRge;
//创建Excel 2000服务器(启动Excel)
if (!ExcelAppCreateDispatch("ExcelApplication",NULL))
{
AfxMessageBox("创建Excel服务失败!");
exit(1);
}
//利用模板文件建立新文档
wbsMyBooksAttachDispatch(ExcelAppGetWorkbooks(),true);
wbMyBookAttachDispatch(wbsMyBooksAdd(_variant_t("g:\\exceltest\\MyTemplatexlt")));
//得到Worksheets
wssMysheetsAttachDispatch(wbMyBookGetWorksheets(),true);
//得到sheet1
wsMysheetAttachDispatch(wssMysheetsGetItem(_variant_t("sheet1")),true);
//得到全部Cells,此时,rgMyRge是cells的集合
rgMyRgeAttachDispatch(wsMysheetGetCells(),true);
//设置1行1列的单元的值
rgMyRgeSetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("This Is A Excel Test Program!"));
//得到所有的
rgMyRgeAttachDispatch(wsMysheetGetColumns(),true);
//得到第一列
rgMyRgeAttachDispatch(rgMyRgeGetItem(_variant_t((long)1),vtMissing)pdispVal,true);
//设置列宽
rgMyRgeSetColumnWidth(_variant_t((long)200));
//调用模板中预先存放的宏
ExcelAppRun(_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);
//打印预览
wbMyBookSetSaved(true);
ExcelAppSetVisible(true);
wbMyBookPrintPreview(_variant_t(false));
//释放对象
rgMyRgeReleaseDispatch();
wsMysheetReleaseDispatch();
wssMysheetsReleaseDispatch();
wbMyBookReleaseDispatch();
wbsMyBooksReleaseDispatch();
ExcelAppReleaseDispatch();
}

google出了一些。若出现"Automation
服务器不能创建对象" 的解决方法
访问某些网站的时候,如果出现"Automation
服务器不能创建对象"的错误提示框,表明网页内的对象需要scrrundll的支持,可以尝试下面的方法:
开始--运行--regsvr32
scrrundll
(不用重新安装 *** 作系统和vsnet)
有些脚本需要微软的
MSXML
控件才能进入。当使用
IE
5
以上版本的缺省安全模式时,会提示是否接受
MSXML
控件,如果接受,MSXML
将自动安装到您的机器上(得等上几分钟)。如果自动安装不成功,可以自行下载和安装
MSXML
30。
如果安装
MSXML
3
后仍然出现
'Automation
服务器不能创建对象'
错误,是因为您的机器禁止了所有的
ActiveX,
一般将
IE
的安全模式设为"中"(2000,2003均适合)即可。
javascript脚本中报这个错误是因为IE的安全设置不允许运行未标记为安全的activeX控件进行初始化和脚本运行,改为提示或启用即可。

分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:

我要在vc中实现将数据插入excel表,从表中查询数据,删除数据,更新数据,会的帮帮忙

解析:

我用的是excel2000

首先利用Visual C++ 60,建立一个MFC基于对话框的工程项目,共享DLL,Win32平台。工程名称ExcelTest。在主对话框中加入一个按钮,

ID IDC_EXCELTEST
Caption Test Excel

双击该按钮,增加成员函数void CExcelTestDlg::OnExceltest()。

在BOOL CExcelTestApp::InitInstance()中,dlgDoModal();之前增加代码:

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\Excel9OLB(D:\Program Files\Microsoft Office\是本机上Microsoft Office 2000的安装目录,可根据个人机器上的实际安装目录修改)。选择_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,加入新类,分别为_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,头文件Excel9h,源文件Excel9cpp。

在ExcelTestDlgcpp文件的头部,#include "ExcelTestDlgh"语句之下,增加 :

#include "defh"

#include "Excel9h"

在void CExcelTestDlg::OnExceltest() 函数中增加如下代码:

void CExcelTestDlg::OnExceltest()

{

_Application ExcelApp;

Workbooks wbsMyBooks;

_Workbook wbMyBook;

Worksheets wssMysheets;

_Worksheet wsMysheet;

Range rgMyRge;

创建Excel 2000服务器(启动Excel)

if (!ExcelAppCreateDispatch("ExcelApplication",NULL))

{

AfxMessageBox("创建Excel服务失败!");

exit(1);

}

利用模板文件建立新文档

wbsMyBooksAttachDispatch(ExcelAppGetWorkbooks(),true);

wbMyBookAttachDispatch(wbsMyBooksAdd(_variant_t("g:\\exceltest\\MyTemplatexlt")));

得到Worksheets

wssMysheetsAttachDispatch(wbMyBookGetWorksheets(),true);

得到sheet1

wsMysheetAttachDispatch(wssMysheetsGetItem(_variant_t("sheet1")),true);

得到全部Cells,此时,rgMyRge是cells的

rgMyRgeAttachDispatch(wsMysheetGetCells(),true);

设置1行1列的单元的值

rgMyRgeSetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("This Is A Excel Test Program!"));

得到所有的列

rgMyRgeAttachDispatch(wsMysheetGetColumns(),true);

得到第一列

rgMyRgeAttachDispatch(rgMyRgeGetItem(_variant_t((long)1),vtMissing)pdispVal,true);

设置列宽

rgMyRgeSetColumnWidth(_variant_t((long)200));

调用模板中预先存放的宏

ExcelAppRun(_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);

打印预览

wbMyBookSetSaved(true);

ExcelAppSetVisible(true);

wbMyBookPrintPreview(_variant_t(false));

释放对象

rgMyRgeReleaseDispatch();

wsMysheetReleaseDispatch();

wssMysheetsReleaseDispatch();

wbMyBookReleaseDispatch();

wbsMyBooksReleaseDispatch();

ExcelAppReleaseDispatch();

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/12772467.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存