本文转自:http://www.cnblogs.com/zhoug2020/archive/2012/04/01/2429064.html

摘要

本文详细介绍了如何自动化像Microsoft Office这样支持COM的应用程序。

更多信息

下面部分介绍了如何创建MFC项目。采用Microsoft Excel举例,你可以将前8个步骤用于任何项目,修改9-15步用于不同的应用程序。

创建自动化项目

. 在Microsoft Developer Studio中,创建"MFC AppWizard(exe)"项目,命名为"AutoProject."
. 在第1步的MFC应用程序向导中,选择"Dialog Based"应用程序类型并点"完成"
在创建的项目信息对话框中将显示创建的类: Application: CAutoProjectApp in AutoProject.h and AutoProject.cpp
Dialog: CAutoProjectDlg in AutoProject.h and AutoProjectDlg.cpp
点 OK 完成项目创建。
. Visual Studio设计编辑区打开了对话框"IDD_AUTOPROJECT_DIALOG" ,依照下面两步修改它。
. 删除静态控件(IDC_STATIC)和Cancel按钮(IDCANCEL)
. 将OK按钮改为"IDRUN",说明改为"Run." 关闭AutoProject.rc对话框设计界面。
. 点View菜单中的ClassWizard(或按CTRL+W)
. 选择消息映射(Message Maps)标签,在对象ID列表框中选择IDRUN,在消息列表框中选择"BN_CLICKED",点添加函数并命名为"OnRun",点OK关闭ClassWizard 提示:此步骤在AutoProjectDLG.h中定义了"OnRun();"函数,并在 AutoProjectDLG.cpp 中添加了消息处理函数CAutoProjectDlg::OnRun()。
. 点View菜单中的ClassWizard(或按CTRL+W)
. 选择Automation标签,点Add Class并选择"From a type library" 浏览并选择你希望自动化的对象库(例如,如果你自动化Excel , 则选择Microsoft Excel 8.0 对象库,默认位于 C:\Program Files\Microsoft Office\Office\Excel8.olb). 如果你自动化Microsoft Excel ,选择位于 C:\Program Files\Microsoft Office\Office\Excel9.olb 的Microsoft Excel 9.0 对象库。 如果你自动化Microsoft Excel 2002和Microsoft Office Excel ,对象库内含在Excel.exe中,Office 2002的Excel.exe 默认位于 C:\program Files\Microsoft Office\Office10\Excel.exe, Office 2003的Excel.exe 默认位于 C:\program Files\Microsoft Office\Office11\Excel.exe 。选择合适的对象库后,点Open,在类确认列表中选择所有类,点OK。 提示:类确认对话框中的列表框里包含了Microsoft Excel 类型库中的所有IDispatch接口(与类中一致)。在对话框下面可以看到命名为Excel8.cpp的执行文件,该文件包含了从COleDispatchDriver派生的封装类,头文件是Excel8.h(对于Excel 2002和Excel ,文件名为Excel.cpp和Excel.h)
. 点OK关闭MFC ClassWizard对话框
. 在 CAutoProjectApp::InitInstance() 函数中添加如下代码,用于加载COM支持库: BOOL CAutoProjectApp::InitInstance()
{
if(!AfxOleInit()) // Your addition starts here
{
AfxMessageBox("Could not initialize COM dll");
return FALSE;
} // End of your addition AfxEnableControlContainer();
.
.
. } . 在AutoProject.cpp顶部添加#include行 #include <afxdisp.h> . 在AutoProjectDlg.cpp 顶部stdafx.h下添加对excel8.h的包含 #include "stdafx.h"
#include "excel8.h" // excel.h in the case of Excel 2002 and Excel 2003. . 在CAutoProjectDlg::OnRun()中添加如下所示的自动化代码 void CAutoProjectDlg::OnRun()
{
_Application app; // app 是 Excel _Application 对象 // 启动 Excel 并得到应用程序对象
if(!app.CreateDispatch("Excel.Application"))
{
AfxMessageBox("Couldn''t start Excel.");
}
else
{
//使 Excel 可视,然后显示消息
app.SetVisible(TRUE);
AfxMessageBox ("Excel is Running!");
}
} . 编译并运行项目。运行结果:当你点击对话框中的Run按钮,Microsoft Excel将被调用。关闭消息框使Auto_Excel对话框激活。CAutoProjectDlg::OnRun()函数结束,application变量离开作用域,Microsoft Excel将退出。 附加说明 当你在项目中从类型库添加类(根据上面所说的9个步骤),你将注意到在项目中添加了许多类。在ClassView中你可以双击某个类查看该类在Excel8.cpp中的定义。 如果你需要验证返回值或改变函数的执行,你需要得到函数的定义,无论何时当你改变函数定义,记住在Excel8.h中修改定义。当你这样做的时候,请确认你改变的是正确的函数定义;有时多个类中包含了相同名字的函数,例如GetApplication。 通过以上如何自动化Microsoft Excel的讲述,你可以将这些方法应用到其它自动化程序中。下表包含了Microsoft Office应用程序类型库的名称。
应用程序(Application) 类型库(Type Library)
-------------------------------------------------------- Microsoft Access Msacc8.olb
Microsoft Jet Database 3.5 DAO350.dll
Microsoft Binder Msbdr8.olb
Microsoft Excel Excel8.olb
Microsoft Graph Graph8.olb
Microsoft Office Mso97.dll
Microsoft Outlook Msoutl97.olb
Microsoft PowerPoint Msppt8.olb Microsoft Word Msword8.olb
Microsoft Access Msacc9.olb
Microsoft Jet Database 3.51 DAO360.dll
Microsoft Binder Msbdr9.olb
Microsoft Excel Excel9.olb
Microsoft Graph Graph9.olb
Microsoft Office Mso9.dll
Microsoft Outlook Msoutl9.olb
Microsoft PowerPoint Msppt9.olb
Microsoft Word Msword9.olb Microsoft Access Msacc.olb
Microsoft Excel Excel.exe
Microsoft Graph Graph.exe
Microsoft Office MSO.dll
Microsoft Outlook MSOutl.olb
Microsoft PowerPoint MSPpt.olb
Microsoft Word MSWord.olb Microsoft Office Access Msacc.olb
Microsoft Office Excel Excel.exe
Microsoft Graph Graph.exe
Microsoft Office MSO.dll
Microsoft Office Outlook MSOutl.olb
Microsoft Office PowerPoint MSPpt.olb
Microsoft Office Word MSWord.olb 提示:除了 Dao350.dll 、Dao360.dll和 Microsoft Office (MSO.dll),类型库默认位于: C:\Program Files\Microsoft Office\Office (Office 路径是 C:\...\Office10,Office 路径是 C:\...\Office11), Dao350.dll/Dao360.dll 默认位于 C:\Program Files\Common Files\Microsoft Shared\Dao。 Office 的MSO.dll 默认 C:\Program Files\Common Files\Microsoft Shared\Office10, Office 的MSO.dll位于 C:\Program Files\Common Files\Microsoft Shared\Office11
========================================================================================== Excel . 引入类 #include "CApplication.h"
#include "CFont0.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CRange.h"
#include "CWorksheet.h"
#include "CWorksheets.h" . 主要接口 BOOL CXXX::Create(void)
{
if(!m_app.CreateDispatch(L"Excel.Application"))
{
AfxMessageBox(L"Could not start Excel.");
return FALSE;
}
m_app.put_DisplayAlerts (VARIANT_FALSE);
m_app.put_UserControl(FALSE);
return TRUE;
} void CXXX::Destroy(void)
{
//CloseWorkbook();
m_app.Quit();
m_app.ReleaseDispatch();
} int CXXX::OpenWorkbook(CString strPath)
{
try
{
LPDISPATCH lpDisp;
lpDisp = m_app.get_Workbooks(); // Get an IDispatch pointer
ASSERT(lpDisp);
m_books.AttachDispatch( lpDisp ); // Attach the IDispatch pointer to the books object. // open the document lpDisp = m_books.Open(strPath, m_covOptional, m_covOptional,
m_covOptional, m_covOptional, m_covOptional, m_covOptional,
m_covOptional, m_covOptional, m_covOptional, m_covOptional,
m_covOptional, m_covOptional, m_covOptional, m_covOptional);
ASSERT(lpDisp); //Set CWorkbook to use lpDisp, the IDispatch* of the actual workbook.
m_book.AttachDispatch(lpDisp);
m_sheets = m_book.get_Worksheets();
}
catch(COleDispatchException* e)
{
TRACE(_T("[EXCEPTION]OpenWorkbook exception COleDispatchException!!!\n"));
TCHAR msg[];
e->GetErrorMessage(msg,);
e->Delete();
MessageBox(,msg, TEXT("Error"), MB_OK | MB_ICONERROR);
return -;
}
return ;
} void Cxxxx::CloseWorkbook(void)
{
m_sheet.ReleaseDispatch();
  m_sheets.ReleaseDispatch();
  m_book.ReleaseDispatch();
  m_books.Close();
  m_books.ReleaseDispatch();
} int CXXX::ReaddExcelData(CString strPath)
{
  if( - == OpenWorkbook(strPath) )
  {
    CloseWorkbook();
    return -;
  }   if ( !ParseCauSheet() )
  {
    CloseWorkbook();
    return -;
  }   CloseWorkbook();
  return ;
} void CExcelOp::ParseSheet(void)
{
CRange range;
  CRange usedRange;
  COleVariant val;
  CString strRangeId,strKeyword;
  CString strRangePos;
  int index = ;   m_sheet = m_sheets.get_Item(COleVariant((short)())); // m_sheets are indexed starting from 1
  usedRange = m_sheet.get_UsedRange();
  range = usedRange.get_Rows();
  int nRowCnt = (int)range.get_Count();
  for(int i = ; i <= nRowCnt; i++)
  {       。。。。。
  }
  return;
}

[转]如何使用MFC和类型库创建自动化项目的更多相关文章

  1. 创建maven项目(cmd 命令)

    2016五月 22 原 创建maven项目(cmd 命令) 分类:maven (994) (0) 1.普通方式创建 1)进入cmd窗口执行 mvn archetype:generate 2) 光标停止 ...

  2. EXCEL类型库的添加

    1. 创建新的C++工程 创建基于对话框的MFC程序 2. 添加库.添加Excel类库 在工程名上右键,选择“添加”—“类”(或者点击菜单栏的“项目”->“添加类”),选择“TypeLib中的M ...

  3. 常见MFC UI界面库[转]

    Xtrme toolkit,BCGControlBar,SkinMagic,AppFace,Skin++,Uskin++,SYGUI,LibUIDK,GuiToolkit,GardenUI等等,除了后 ...

  4. 常见MFC UI界面库

    Xtrme toolkit,BCGControlBar,SkinMagic,AppFace,Skin++,Uskin++,SYGUI,LibUIDK,GuiToolkit,GardenUI等等,除了后 ...

  5. Delphi COM编程技术三类型库(库文件中的工具栏,很全)

    在COM组件的使用和开发过程中经常需要获取有关组件的信息.而COM组件以二进制代码的形式发布,如果不借助特定的工具这些相关信息将难以被获取.通过访问类型库就可以查看COM组件的信息. 一.类型库的基础 ...

  6. [UE4]使用C++重写蓝图,SpawnObject根据类型动态创建UObject

    先大量使用蓝图制作项目,后续再用C++把复杂的蓝图重写一遍,用C++代码按照蓝图依葫芦画瓢就可以了,很简单,但需要遵守一些原则: 第一种方法:使用继承 一.创建一个C++类作为蓝图的父类(C++类继承 ...

  7. Qt动态连接库/静态连接库创建与使用,QLibrary动态加载库

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt动态连接库/静态连接库创建与使用,QLibrary动态加载库     本文地址:https ...

  8. VS2010创建C++静态链接库创建和使用

    VS2010创建C++静态链接库的方法: 1. 创建一个新项目,在已安装的模板中选择“常规”,在右边的类型下选择“空项目”,在名称和解决方案名称中输入 staLIB.点击确定. 2.在解决方案资源管理 ...

  9. VC 静态库与动态库(三)动态库创建与使用_隐式链接

    动态库分为二种,一种隐式链接,另一种显示调用.不论哪种动态库,本质都是运行时动态加载 隐式链接:程序运行时,由编译系统自动加载动态库,然后根据程序的引入表进行重定位,当程序退出时自动卸载动态库 显示调 ...

随机推荐

  1. 在Java中如何编写回调函数,以及回调函数的简单应用

    import static java.lang.System.out; import static java.lang.System.err; import java.util.logging.Lev ...

  2. spring cloud-服务注册

    正常的服务模块,注册到注册中心,让别的服务发现,调用服务 创建“服务提供方” 下面我们创建提供服务的客户端,并向服务注册中心注册自己. 假设我们有一个提供计算功能的微服务模块,我们实现一个RESTfu ...

  3. eclipse 修改代码后无法生效,需要clean后才能生效的解决办法

    勾选project-->Bulid Automatically选项(自动编译)

  4. 如何使用git 生成patch 和打入patch【转】

    本文转载自:http://blog.csdn.net/liuhaomatou/article/details/54410361 平时我们在使用git 管理项目的时候,会遇到这样一种情况,那就是客户使用 ...

  5. solr安装-tomcat+solrCloud构建稳健solr集群

    solrCloud的搭建可以有两种方式:使用solr内嵌的jetty来搭建:使用外部web容器tomcat来搭建.对于使用jett来搭建参考solr官方的手册照着做肯定ok,下面我主要讲的是如何使用t ...

  6. vue之安装配置

    直接上图

  7. mysql负载均衡方案

    mysql负载均衡方案 一.直接连接 数据库的读写分离方案很多,这里介绍基于mysql数据库的读写分离方案. 比较常见的读写分离方案如下: 1 基于查询分离 最简单的分离方法是将读和写分发到主和从服务 ...

  8. ASP.NET Core:WebAppCoreApi

    ylbtech-ASP.NET Core:WebAppCoreApi 1.返回顶部 1. 2. 3.           4. 2. Controllers返回顶部 1.ValuesControlle ...

  9. 如何 Xcode 开发工具里安装一个空的项目末模板

    很多朋友因为Xcode升级取消了空工程模板而发愁  今天给大家推荐一个简单方便的方法,导入空工程模板 对于 xcode7 来说可以使用下面的方法添加空模板.建议在升级的时候,不要下载beta版,最好下 ...

  10. Windows远程服务器不能复制粘贴

    操作步骤: 在服务器上打开任务管理器,查看进程,有 rdpclip.exe 进程,关闭此进程: 然后 开始->运行->rdpclip.exe 重新运行此程序,恢复正常.