摘要

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

更多信息

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

创建自动化项目

1. 在Microsoft Developer Studio中,创建"MFC AppWizard(exe)"项目,命名为"AutoProject."
2. 在第1步的MFC应用程序向导中,选择"Dialog Based"应用程序类型并点"完成"
在创建的项目信息对话框中将显示创建的类:

Application: CAutoProjectApp in AutoProject.h and AutoProject.cpp
Dialog: CAutoProjectDlg in AutoProject.h and AutoProjectDlg.cpp

点 OK 完成项目创建。

3. Visual Studio设计编辑区打开了对话框"IDD_AUTOPROJECT_DIALOG" ,依照下面两步修改它。
4. 删除静态控件(IDC_STATIC)和Cancel按钮(IDCANCEL)
5. 将OK按钮改为"IDRUN",说明改为"Run." 关闭AutoProject.rc对话框设计界面。
6. 点View菜单中的ClassWizard(或按CTRL+W)
7. 选择消息映射(Message Maps)标签,在对象ID列表框中选择IDRUN,在消息列表框中选择"BN_CLICKED",点添加函数并命名为"OnRun",点OK关闭ClassWizard

提示:此步骤在AutoProjectDLG.h中定义了"OnRun();"函数,并在 AutoProjectDLG.cpp 中添加了消息处理函数CAutoProjectDlg::OnRun()。

8. 点View菜单中的ClassWizard(或按CTRL+W)
9. 选择Automation标签,点Add Class并选择"From a type library" 浏览并选择你希望自动化的对象库(例如,如果你自动化Excel 97, 则选择Microsoft Excel 8.0 对象库,默认位于 C:\Program Files\Microsoft Office\Office\Excel8.olb).

如果你自动化Microsoft Excel 2000,选择位于 C:\Program Files\Microsoft Office\Office\Excel9.olb 的Microsoft Excel 9.0 对象库。

如果你自动化Microsoft Excel 2002和Microsoft Office Excel 2003 ,对象库内含在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 2003,文件名为Excel.cpp和Excel.h)

10. 点OK关闭MFC ClassWizard对话框
11. 在 CAutoProjectApp::InitInstance() 函数中添加如下代码,用于加载COM支持库:

BOOL CAutoProjectApp::InitInstance()
{if(!AfxOleInit())  // Your addition starts here{AfxMessageBox("Could not initialize COM dll");return FALSE;}     // End of your additionAfxEnableControlContainer();...}
12. 在AutoProject.cpp顶部添加#include行

#include <afxdisp.h>
13. 在AutoProjectDlg.cpp 顶部stdafx.h下添加对excel8.h的包含

#include "stdafx.h"
#include "excel8.h" // excel.h in the case of Excel 2002 and Excel 2003.
14. 在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!");}
}
15. 编译并运行项目。运行结果:当你点击对话框中的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 97                   Msacc8.olbMicrosoft Jet Database 3.5            DAO350.dllMicrosoft Binder 97                   Msbdr8.olbMicrosoft Excel 97                    Excel8.olbMicrosoft Graph 97                    Graph8.olbMicrosoft Office 97                   Mso97.dllMicrosoft Outlook 97                  Msoutl97.olbMicrosoft PowerPoint 97               Msppt8.olbMicrosoft Word 97                     Msword8.olbMicrosoft Access 2000                 Msacc9.olbMicrosoft Jet Database 3.51           DAO360.dllMicrosoft Binder 2000                 Msbdr9.olbMicrosoft Excel 2000                  Excel9.olbMicrosoft Graph 2000                  Graph9.olbMicrosoft Office 2000                 Mso9.dllMicrosoft Outlook 2000                Msoutl9.olbMicrosoft PowerPoint 2000             Msppt9.olbMicrosoft Word 2000                   Msword9.olbMicrosoft Access 2002                 Msacc.olbMicrosoft Excel 2002                  Excel.exeMicrosoft Graph 2002                  Graph.exeMicrosoft Office 2002                 MSO.dllMicrosoft Outlook 2002                MSOutl.olbMicrosoft PowerPoint 2002             MSPpt.olbMicrosoft Word 2002                   MSWord.olbMicrosoft Office Access 2003          Msacc.olbMicrosoft Office Excel 2003           Excel.exeMicrosoft Graph 2003                  Graph.exeMicrosoft Office 2003                 MSO.dllMicrosoft Office Outlook 2003         MSOutl.olbMicrosoft Office PowerPoint 2003      MSPpt.olbMicrosoft Office Word 2003            MSWord.olb

提示:除了 Dao350.dll 、Dao360.dll和 Microsoft Office 10(MSO.dll),类型库默认位于: C:\Program Files\Microsoft Office\Office (Office 2002 路径是 C:\...\Office10,Office 2003 路径是 C:\...\Office11), Dao350.dll/Dao360.dll 默认位于 C:\Program Files\Common Files\Microsoft Shared\Dao。 Office 2002 的MSO.dll 默认 C:\Program Files\Common Files\Microsoft Shared\Office10, Office 2003 的MSO.dll位于 C:\Program Files\Common Files\Microsoft Shared\Office11
==========================================================================================

Excel

1. 引入类

#include "CApplication.h"
#include "CFont0.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CRange.h"
#include "CWorksheet.h"
#include "CWorksheets.h"

2. 主要接口

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[2048];
        e->GetErrorMessage(msg,1024);
        e->Delete();
        MessageBox(0,msg, TEXT("Error"), MB_OK | MB_ICONERROR);
        return -1;
     }
     return 0;
}

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( -1 == OpenWorkbook(strPath) )
  {
    CloseWorkbook();
    return -1;
  }

  if ( !ParseCauSheet() )
  {
    CloseWorkbook();
    return -1;
  }

  CloseWorkbook();
  return 0;
}

void CExcelOp::ParseSheet(void)
{
    CRange range;
  CRange usedRange;
  COleVariant val;
  CString strRangeId,strKeyword;
  CString strRangePos;
  int index = 0;

  m_sheet = m_sheets.get_Item(COleVariant((short)(1))); // 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 = 1; i <= nRowCnt; i++)
  {

      。。。。。
  }
  return;
}

如何使用MFC和类型库创建自动化项目相关推荐

  1. 计算机网络课程设计,使用MFC实现界面化创建ARP发送与接受程序(一)

    计算机网络课程设计,使用MFC实现界面化创建ARP发送与接受程序(一) 1.实验内容: 利用WinpCap开源库函数,编写程序实现ARP报文的发送和接收 2.实验要求: 利用WINPCAP给出的API ...

  2. 使用 Boost.Lambda 库创建并存储在 Boost.Function 对象中的函子中使用 Boost.Units 的数量、单位和绝对类型

    使用 Boost.Lambda 库创建并存储在 Boost.Function 对象中的函子中使用 Boost.Units 的数量.单位和绝对类型 实现功能 C++实现代码 实现功能 使用 Boost. ...

  3. 如何使用自动化与分析工具库创建 Excel 直方图

    本文提供了一个 Visual Basic 项目示例,该示例演示了如何使用分析工具库 (ATP) 生成直方图.本文还介绍了一些基本技术,使用这些技术可以实现并使用分析工具库外接程序库,以及具有自动化功能 ...

  4. 独家 | 用Python Featuretools库实现自动化特征工程(附链接)

    作者:Prateek Joshi 翻译:张玲 校对:李润嘉 本文约4000字,建议阅读10分钟. 本文简要介绍特征工程的基本组成部分,并用直观的示例理解它们,最后给出使用Python Featuret ...

  5. MFC的静态库.lib、动态库.dll(包含引入库.lib)以及Unicode库示例

    以vs2012为标准.转自:http://technet.microsoft.com/zh-cn/library/w4zd66ye ,有改动. 一 MFC的静态库(.lib) MFC静态库使用下列命名 ...

  6. Visual Studio 2010 Win32 Usb HID 动态库创建

    一.概述 最近在项目中使用md5和sh1 算法,发现在原来的工程上,加上这两个算法的源代码竟然编译不能通过,出现100 多个bug.后来上来发现错误都是源于两个算法使用的一个头文件"StdI ...

  7. 三.MFC DLL窗口的创建和注入显示

    一.什么是MFC 微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windo ...

  8. VC2019 VC2022添加导入Word Excel AutoCAD Surfer等类型库(typelibaray)的方法

    ----哆啦刘小洋 原创,转载需说明出处 2022-12-30 前两天,发现很多人在使用VC2019 VC2022开发Office AutoCAD Surfer等自动化组件时,不知道怎么导入类型库,和 ...

  9. 树回归--python Tkinter库创建GUI(2)

    简单的Tkinter库创建GUI的例子可参考: http://blog.csdn.net/lilong117194/article/details/78456376 下面是代码: # -*- codi ...

最新文章

  1. Vuex 使用了 module 后的访问方法 ..
  2. PP物料主数据中MRP相关配置字段理解
  3. mysql定义条件和处理_mysql sql存储过程条件定义与处理
  4. Docker 安装 linux版
  5. c语言获取Windows缓存,【图片】【C语言】【Windows】--IE缓存提取器【erbi_lucifer吧】_百度贴吧...
  6. 复变函数 —— 2. 复函数的导数与复变函数的导数(柯西黎曼方程)的定义
  7. 小程序生命周期钩子函数
  8. bat调用ssis package
  9. 宾馆如何实现WiFi无线上网短信认证?
  10. Ureport2 ---报表设计(2)--报表计算模型
  11. SQL语句的五大类:DQL、DML、DDL、DTL、DCL
  12. 异常java.net.MalformedURLException: unknown protocol: jrt
  13. TODO LIST案例
  14. Arduino - PC817C光耦
  15. 鸿蒙十大凶兽排名,上古十大神兽|上古十大洪荒神兽|上古十大神兽资料大全【图文】...
  16. lcd1602引脚功能
  17. RT-Thread进阶之低功耗PM组件应用笔记
  18. Mac 编译OpenSSL 静态库、动态链接库
  19. 行业典型案例解读 | FASS全闪高性能文件网关解决方案
  20. 思科模拟器配置静态路由(下一跳使用端口)

热门文章

  1. C#后台获取数据库数据--ADO.NET
  2. shell编程-条件判断
  3. 【EntityFramework Core】实体实例化注入
  4. 浅谈 iOS 版本号
  5. python的scramy架构_Python库: PrettyTable 模块
  6. getvalue函数怎么使用_Java中的构造函数——通过示例学习Java编程(14)
  7. Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk
  8. C#显示相机实时画面
  9. 机器学习入门:K-近邻算法
  10. ylbtech-LanguageSamples-UserConversions(用户定义的转换)