Excel2000/XP和PowerPoint2000/XP下內部COM外掛的實現 (轉)

worldblog發表於2007-12-14
Excel2000/XP和PowerPoint2000/XP下內部COM外掛的實現 (轉)[@more@]

2000/XP和2000/XP下內部COM的實現:namespace prefix = o ns = "urn:schemas--com::office" />

作者:徐景周

示例原始碼(?paper_id=735)

簡介

Excel2000和PowerPoint2000下內部COM外掛的實現這篇文章,實際上是< Office2000下內部COM外掛的程式設計實現> 和<2000/XP中內部COM外掛的程式設計實現>二篇文章的續篇。採用上篇文章< Word2000/XP中內部COM外掛的程式設計實現>中寫作風格,不再重複哆嗦大部分前面文章裡已經講過的內容了,只將重點放在它們間實現的不同點上,有興趣的朋友可以參看前面二篇文章,然後再看這篇文章及示例原始碼一定會倍感輕鬆。本文章提供的Excel2000外掛和PowerPoint2000外掛的二個示例原始碼執行後的效果圖如下所示:

具體實現

  下面,讓我們來看看如何最小化修改原基礎上的原始碼來實現一個Excel2000和PowerPoint2000下COM外掛,建立工程及其它步驟可根據前面二篇文章中介紹的內容進行操作。在這裡,除了下面介紹的原始碼內容需要改動處,其它部分的原始碼內容基本上和前面我講的文章中的示例原始碼相同,一般並不需要改動(除非你有其它方面的特殊需求)。

第一點:在中Stdafx.h中的型別的匯入庫部分原始碼將有所不同,可將原始檔中原始碼替換為下面部分既可。

l  Excel2000下:

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

/* 匯入工程所需Office2K及Excel2K型別庫,其*/

/* 中路徑可根據路徑自行設定, jingzhou xu  */

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

#import "E:Program FilesMicrosoft OfficeOfficemso9.dll" rename_namespace("Office")

using namespace Office;

#import "D:Program FilesCommon FilesMicrosoft SharedVBAVBA6VBE6EXT.olb" rename_namespace("VBE6")

using namespace VBE6;

// Excel匯入庫

#import "E:Program FilesMicrosoft OfficeOfficeEXCEL9.olb" rename("RGB","RGBEx"),rename("DialogBox","DialogBoxEx"),named_guids,rename_namespace("MSExcel")

using namespace MSExcel;

l  PowerPoint2000下:

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

/* 匯入工程所需Office2K及PowerPoint2K型別庫,其*/

/* 中路徑可根據安裝路徑自行設定, jingzhou xu  */

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

#import "E:Program FilesMicrosoft OfficeOfficemso9.dll" rename_namespace("Office")

using namespace Office;

#import "D:Program FilesCommon FilesMicrosoft SharedVBAVBA6VBE6EXT.olb" rename_namespace("VBE6")

using namespace VBE6;

// PowerPoint匯入庫

#import "E:Program FilesMicrosoft OfficeOfficeMSPPT9.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 Loaehavior = 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'

  }

  }

  }

  }

  }

  }

}

第三點:Excel2000和PowerPoint2000中沒有ActiveExplorer,所以不必再經過它獲取Commanrs,直接從_Application中獲得CommandBars物件進行操作。修改部分如下面原始碼所示:

l  Excel2000下:

// 裝缷外掛時處理

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

{

  CComPtr < Office::_CommandBars> spCmdBars;

  // Excel應用介面_Application

  CComQIPtr<:_application> spApp(Application);

  SERT(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<:_application> spApp(Application);

  ATLASSERT(spApp);

 

  // 獲取CommandBars介面

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

  if(FAILED(hr))

  return hr;

  ATLASSERT(spCmdBars);

  // ……

}

  好了,Excel2000、PowerPoint2000、Word2000和2000下的內部COM外掛實現的不同點主要就這些了,具體實現的詳細程式碼可參看幾篇文章所附帶示例原始碼,內有詳細註釋。

參考文獻:

Office2000下內部COM外掛的程式設計實現 -- 徐景周(譯者)

Word2000/XP中內部COM外掛的程式設計實現 – 徐景周

ATL開發指南(第二版) -- Tom Armstrong & Ron Patton

聯絡方式:

地址:陝西省西安市勞動路2號院六單元

郵編:710082

編者E:

未來工作室(Future Studio)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993436/,如需轉載,請註明出處,否則將追究法律責任。

相關文章