Office 2000/XP 中 Word 內建 COM 增益集的實作方式與 Outlook 2000 大同小異,本文著重於差異點,配合前文《Office 2000 內建 COM 增益集程式設計實作》可事半功倍。

// 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;
#import "E:\\Program Files\\Microsoft Office\\Office\\MSWORD9.olb" rename("ExitWindows","ExitWindowsEx"), named_guids, rename_namespace("MSWord")
using namespace MSWord;
// Office XP (註解備份)
/*
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\Office10\\MSO.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;
#import "D:\\Program Files\\Microsoft Office\\Office10\\MSWORD.olb" rename("ExitWindows","ExitWindowsEx"), named_guids, rename_namespace("MSWord")
using namespace MSWord;
*/
HKCU
{
Software
{
Microsoft
{
Office
{
Word
{
Addins
{
'WordAddin.Word2000Addin'
{
val FriendlyName = s 'Word2000 Addin'
val Description = s 'Word2000 Addin'
val LoadBehavior = d '00000003'
val CommandLineSafe = d '00000001'
}
}
}
}
}
}
}
Word 沒有 ActiveExplorer 物件,直接從 _Application 取得 CommandBars:
STDMETHOD(OnConnection)(IDispatch *Application, ext_ConnectMode ConnectMode, IDispatch *AddInInst, SAFEARRAY **custom)
{
CComPtr<Office::_CommandBars> spCmdBars;
CComQIPtr<MSWord::_Application> spApp(Application);
ATLASSERT(spApp);
HRESULT hr = spApp->get_CommandBars(&spCmdBars);
if (FAILED(hr)) return hr;
ATLASSERT(spCmdBars);
// 後續工具列建立邏輯同 Outlook 範例
......
}
Office 97 不支援 IDTExtensibility2,可採 VBA + ATL 增益集 方式:
Init()、Uninit() 兩個匯出函數,分別處理工具列按鈕建立/移除。.dot) 中撰寫 VBA AutoExec/AutoExit 建立/釋放 COM 物件並呼叫上述函數。Dim o As Application
Dim obj As Object
Sub AutoExec()
Set obj = CreateObject("Word97Addin.Addin")
Set o = ThisDocument.Application
obj.Init o
End Sub
Sub AutoExit()
Set o = ThisDocument.Application
obj.Uninit o
Set obj = Nothing
Set o = Nothing
End Sub
掌握三大差異點,即可快速將 Outlook 增益集經驗移植至 Word 2000/XP。完整原始碼請參考本文附件。