Excel2000/XP和PowerPoint2000/XP下内部COM插件的实现

原创 2003年04月22日 08:59:00

Excel2000/XPPowerPoint2000/XP下内部COM插件的实现

作者:徐景周

 

下载示例源码(http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=735)

 

简介

Excel2000PowerPoint2000下内部COM插件的编程实现这篇文章,实际上是< Office2000下内部COM插件的编程实现> <Word2000/XP中内部COM插件的编程实现>二篇文章的续篇。采用上篇文章< Word2000/XP中内部COM插件的编程实现>中写作风格,不再重复哆嗦大部分前面文章里已经讲过的内容了,只将重点放在它们间实现的不同点上,有兴趣的朋友可以参看前面二篇文章,然后再看这篇文章及示例源码一定会倍感轻松。本文章提供的Excel2000插件和PowerPoint2000插件的二个示例源码运行后的效果图如下所示:

 

 

具体实现

  下面,让我们来看看如何最小化修改原基础上的源码来实现一个Excel2000PowerPoint2000COM插件,建立工程及其它步骤可根据前面二篇文章中介绍的内容进行操作。在这里,除了下面介绍的源码内容需要改动处,其它部分的源码内容基本上和前面我讲的文章中的示例源码相同,一般并不需要改动(除非你有其它方面的特殊需求)

第一点:在文件中Stdafx.h中的类型的导入库部分源码将有所不同,可将源文件中源码替换为下面部分既可。

l         Excel2000:

/////////////////////////////////////////////////////////////////////////////////

/* 导入工程所需Office2KExcel2K类型库,其*/

/* 中路径可根据安装路径自行设定, jingzhou xu   */

/*******************  Office 2000下导入使用 ************************/

#import "E://Program Files//Microsoft Office//Office//mso9.dll" rename_namespace("Office")

using namespace Office;

 

#import "D://Program Files//Common Files//Microsoft Shared//VBA//VBA6//VBE6EXT.olb" rename_namespace("VBE6")

using namespace VBE6;

 

// Excel导入库

#import "E://Program Files//Microsoft Office//Office//EXCEL9.olb" rename("RGB","RGBEx"),rename("DialogBox","DialogBoxEx"),named_guids,rename_namespace("MSExcel")

using namespace MSExcel;

 

l         PowerPoint2000:

/////////////////////////////////////////////////////////////////////////////////

/* 导入工程所需Office2KPowerPoint2K类型库,其*/

/* 中路径可根据安装路径自行设定, jingzhou xu   */

/*******************  Office 2000下导入使用 ************************/

#import "E://Program Files//Microsoft Office//Office//mso9.dll" rename_namespace("Office")

using namespace Office;

 

#import "D://Program Files//Common Files//Microsoft Shared//VBA//VBA6//VBE6EXT.olb" rename_namespace("VBE6")

using namespace VBE6;

 

// PowerPoint导入库

#import "E://Program Files//Microsoft Office//Office//MSPPT9.OLB" named_guids,rename_namespace("MSPPT")

using namespace MSPPT;

 

第二点:注册类型信息有所不同(*.rgs),将文件rgs中内容的下半部分修改如下所示:

l         Excel2000:

HKCU

{

  Software

  {

    Microsoft

    {

      Office

      {

        Excel

        {

          Addins

          {

            'ExcelAddin.Excel2000Addin'

            {

              val FriendlyName = s 'Excel20002000 Addin'

              val Description = s 'Excel20002000下插件'

              val LoadBehavior = d '00000003'

              val CommandLineSafe = d '00000001'

            }

          }

        }

      }

    }

  }

}

 

l         PowerPoint2000:

HKCU

{

  Software

  {

    Microsoft

    {

      Office

      {

        PowerPoint

        {

          Addins

          {

            'PPTAddin.PowerPoint2000Addin'

            {

              val FriendlyName = s 'PowerPoint2000 Addin'

              val Description = s 'PowerPoint2000下插件'

              val LoadBehavior = d '00000003'

              val CommandLineSafe = d '00000001'

            }

          }

        }

      }

    }

  }

}

 

第三点Excel2000PowerPoint2000中没有ActiveExplorer对象,所以不必再经过它获取CommandBars,直接从_Application中获得CommandBars对象进行操作。修改部分如下面源码所示:

l         Excel2000:

// 装缷插件时处理

STDMETHOD(OnConnection)(IDispatch * Application, ext_ConnectMode ConnectMode, IDispatch * AddInInst, SAFEARRAY * * custom)

{

              CComPtr < Office::_CommandBars> spCmdBars;

 

              // Excel应用接口_Application

              CComQIPtr<MSExcel::_Application> spApp(Application);

              ATLASSERT(spApp);

             

              // 获取CommandBars接口

              HRESULT hr = spApp->get_CommandBars(&spCmdBars);

              if(FAILED(hr))

                     return hr;

              ATLASSERT(spCmdBars);

        // ……

}

 

l         PowerPoint2000:

// 装缷插件时处理

STDMETHOD(OnConnection)(IDispatch * Application, ext_ConnectMode ConnectMode, IDispatch * AddInInst, SAFEARRAY * * custom)

{

              CComPtr < Office::_CommandBars> spCmdBars;

 

              // Word应用接口_Application

              CComQIPtr<MSPPT::_Application> spApp(Application);

              ATLASSERT(spApp);

             

              // 获取CommandBars接口

              HRESULT hr = spApp->get_CommandBars(&spCmdBars);

              if(FAILED(hr))

                     return hr;

              ATLASSERT(spCmdBars);

              // ……

}

 

       好了,Excel2000PowerPoint2000Word2000Outlook2000下的内部COM插件实现的不同点主要就这些了,具体实现的详细代码可参看几篇文章所附带示例源码,内有详细注释。

 

 

参考文献:

Office2000下内部COM插件的编程实现 -- 徐景周(译者)

Word2000/XP中内部COM插件的编程实现 – 徐景周

ATL开发指南(第二版) -- Tom Armstrong & Ron Patton

 

联系方式:

地址:陕西省西安市劳动路2号院六单元

邮编:710082

编者EMAIL:jingzhou_xu@163.net

未来工作室(Future Studio)

Windows XP下更改COM端口的方法

我们在使用串口转USB的时候,就会遇到这个问题。有些串口调试助手提供的COM口可选择性较小,比如只提供COM1——COM4。如何更改串口呢? 1、我的电脑-> 管理->设备管理器,如下截图: ...
  • David_xtd
  • David_xtd
  • 2014年04月25日 12:20
  • 9834

Xp 下使用 Fiddler 抓取android手机包

写这篇文章的初衷很简单,就是想达到这样一个目的,但是网上很多这种教程,我都按照做了,发现都不行。后来自己瞎琢磨发现了两个前置条件: 就是必须有一个无线网卡,防火墙必须关闭; 环境: XP SP3 ...
  • walkerJong
  • walkerJong
  • 2016年03月04日 18:10
  • 1846

VC程序中Windows XP风格程序界面的实现

文章原创,转载请注明出处 默认情况下用MVC++98创建的MFC应用程序的界面使用5.82版本的ComCtrl32.dll中控件,使得其风格为Windows 2000系统的风格, 看上去绘制得比较...
  • menglongbor
  • menglongbor
  • 2013年01月17日 16:19
  • 3016

svn 在xp系统上安装服务器端和客户端

一、下载所需文件   服务器:Subversion v1.7 http://sourceforge.net/projects/win32svn/   客户端:Tortoisesvn V1....
  • zhangli13629847100
  • zhangli13629847100
  • 2015年03月12日 10:09
  • 2562

WindowsXP/7/10 Python3.6.3开发环境配置图文教程

WindowsXP/7/10 Python3.6.3开发环境配置图文教程
  • best3c
  • best3c
  • 2017年11月01日 12:28
  • 307

基于Qt 5.7.0的适合Window XP系统的应用开发

1. Qt库的编译         Qt官方对XP系统的支持止步于5.7.0版本,从5.7.1开始不再支持XP。但从官网上下载的5.7.0版本的安装包是不支持XP的,需要自己下载源码进行编译,编译的...
  • lixiaoxin1989
  • lixiaoxin1989
  • 2017年03月29日 10:42
  • 2076

XP系统设置多用户远程桌面

一、被访问的计算机开启远程连接功能 1.创建用于远程连接的账户AAA(管理员或者受限)以及密码(必须有)。 2.开启允许远程连接功能,并选择允许访问的账户。 具体做法:打开  我的电脑——属性=>系...
  • GOD_yamade
  • GOD_yamade
  • 2013年01月23日 20:43
  • 2070

深度XP完美精简版 (适合低配置电脑)——迅雷

深度XP完美精简版 (适合低配置电脑)——迅雷 我一向是推崇Windows XP sp2原版系统的.因为原版系统稳定、安全。但今天,看到一位朋友的老机子也装了个上海政府版的XP sp2系统,运行...
  • guan_xiu
  • guan_xiu
  • 2016年04月07日 11:01
  • 8958

window xp 下编译与安装openssl源码

最近在研究有关加密方面的东西,所以顺便稍微鼓捣了一下openssl,现在把安装N次成功的步骤记录下来 一、安装环境: 1、window xp 2、Microsoft Visual Stu...
  • yezis
  • yezis
  • 2015年02月07日 17:43
  • 908

敏捷开发之Scrum扫盲,及敏捷开发中XP与SCRUM的区别

敏捷开发之Scrum扫盲篇 现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP...   为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据...
  • a_little_a_day
  • a_little_a_day
  • 2016年07月19日 19:50
  • 4218
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Excel2000/XP和PowerPoint2000/XP下内部COM插件的实现
举报原因:
原因补充:

(最多只允许输入30个字)