这是MS Office应用开发心得的第一篇,我将结合实际项目研发把心得写出来。

这个MS Office同步器是使用VB6开发的,本系列的后半章节我会把.NET的实现写出来。所以,如果大家对VB6不感兴趣,可以忽略,不过,如果你对Office应用开发比较感兴趣,仍然可以继续看下去,因为具体实现的语言是VB,但目的仍然是Office应用开发。

相关的一些信息我已经在以前的帖子中写过,大家可以参看一下,我不再复述。

从架构上来说,我实现了在VB6中利用HTTP跟ASP.NET进行交互,把本地Office信息(Outlook中的联系人、任务、日程、便笺、公告和邮件等等)与远程服务器进行同步。

或许大家会疑惑,为什么我会选择VB6而不选择.NET来开发,答案是:https://files.cnblogs.com/unruledboy/AddIn.zip

需要说明的是,这个Office同步器是一个比较抽象的东西,他通过外部对象定义属性列表来确定同步的信息,意思就是说,任何同步的对象和具体属性都可以在外部配置文件中定义,不需要改动程序。

这个Office同步器是以插件形式出现的,要设计Office插件,必须先引用几个类库:
1、Microsoft Add-In Designer:微软插件设计器
2、Microsoft Office xx.0 Object Library:Office类库
3、Microsoft Outlook xx.0 Object Library:Outlook类库

微软插件设计器的作用是简化微软支持通过COM技术来实现的插件的编写工作;Office类库的主要功能是可以实现对Office系列产品通用的菜单和工具栏等对象的访问;Outlook类库当然就是访问其拥有信息了:联系人、任务、日程、便笺、公告和邮件等等。

新增一Office设计器,VB6自动添加了相关的接口,以下是该设计器的代码:

MS Office同步器研发心得(1)之自动化'*************************************************************************
MS Office同步器研发心得(1)之自动化'
*
MS Office同步器研发心得(1)之自动化'
*  名称:dsrOutlook
MS Office同步器研发心得(1)之自动化'
*
MS Office同步器研发心得(1)之自动化'
*  功能:Add-In主入口
MS Office同步器研发心得(1)之自动化'
*
MS Office同步器研发心得(1)之自动化'
*  作者:chs(wilson chan)
MS Office同步器研发心得(1)之自动化'
*
MS Office同步器研发心得(1)之自动化'
*  创建:2004/6/14
MS Office同步器研发心得(1)之自动化'
*
MS Office同步器研发心得(1)之自动化'
*  更新:2004/6/25 10:51
MS Office同步器研发心得(1)之自动化'
*
MS Office同步器研发心得(1)之自动化'
*  说明:
MS Office同步器研发心得(1)之自动化'
*
MS Office同步器研发心得(1)之自动化'
*************************************************************************
MS Office同步器研发心得(1)之自动化
Option Explicit
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
' Implement extensibility library.
MS Office同步器研发心得(1)之自动化
Implements IDTExtensibility2
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
Private WithEvents p_mctlBtnEvents    As Office.CommandBarButton
MS Office同步器研发心得(1)之自动化
Private WithEvents p_mctlBtnEvents2    As Office.CommandBarButton
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
Private Sub AddinInstance_Initialize()
MS Office同步器研发心得(1)之自动化    
' 插件启动
MS Office同步器研发心得(1)之自动化
    
MS Office同步器研发心得(1)之自动化End Sub
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
Private Sub AddinInstance_Terminate()
MS Office同步器研发心得(1)之自动化    
' 插件关闭
MS Office同步器研发心得(1)之自动化
End Sub
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化Private Sub p_mctlBtnEvents_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
MS Office同步器研发心得(1)之自动化    '打开您的窗口
MS Office同步器研发心得(1)之自动化
End Sub
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化Private Sub p_mctlBtnEvents2_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
MS Office同步器研发心得(1)之自动化   '打开您的窗口
MS Office同步器研发心得(1)之自动化
End Sub
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)
MS Office同步器研发心得(1)之自动化    
' Debug.Print OnBeginShutdown
MS Office同步器研发心得(1)之自动化
End Sub
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
'插件加载,应用程序启动完成
MS Office同步器研发心得(1)之自动化
Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, _
MS Office同步器研发心得(1)之自动化    ByVal ConnectMode 
As AddInDesignerObjects.ext_ConnectMode, _
MS Office同步器研发心得(1)之自动化    ByVal AddInInst 
As Object, custom() As Variant)
MS Office同步器研发心得(1)之自动化    
MS Office同步器研发心得(1)之自动化    
Set p_objAppInstance = Application
MS Office同步器研发心得(1)之自动化    
MS Office同步器研发心得(1)之自动化
    Set p_mctlBtnEvents = CreateAddInCommandBarButton(Application, ConnectMode, AddInInst, True)
MS Office同步器研发心得(1)之自动化    
MS Office同步器研发心得(1)之自动化    
Set p_mctlBtnEvents2 = CreateAddInCommandBarButton(Application, ConnectMode, AddInInst, False)
MS Office同步器研发心得(1)之自动化   
MS Office同步器研发心得(1)之自动化    
MS Office同步器研发心得(1)之自动化
End Sub
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
'应用程序关闭
MS Office同步器研发心得(1)之自动化Private Sub IDTExtensibility2_OnDisconnection(ByVal _
MS Office同步器研发心得(1)之自动化    RemoveMode 
As AddInDesignerObjects.ext_DisconnectMode, _
MS Office同步器研发心得(1)之自动化    custom() 
As Variant)
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化    
RemoveAddInCommandBarButton RemoveMode, True
MS Office同步器研发心得(1)之自动化    
MS Office同步器研发心得(1)之自动化    RemoveAddInCommandBarButton RemoveMode, False

MS Office同步器研发心得(1)之自动化
End Sub
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)
MS Office同步器研发心得(1)之自动化    
'Debug.Print "OnStartupComplete"
MS Office同步器研发心得(1)之自动化
End Sub
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)
MS Office同步器研发心得(1)之自动化    
'Debug.Print "OnAddInsUpdate"
MS Office同步器研发心得(1)之自动化
End Sub
MS Office同步器研发心得(1)之自动化

以下是插件代码:
MS Office同步器研发心得(1)之自动化'*************************************************************************
MS Office同步器研发心得(1)之自动化'
*
MS Office同步器研发心得(1)之自动化'
*  名称:basAddIn
MS Office同步器研发心得(1)之自动化'
*
MS Office同步器研发心得(1)之自动化'
*  功能:Add-In控制
MS Office同步器研发心得(1)之自动化'
*
MS Office同步器研发心得(1)之自动化'
*  作者:chs(wilson chan)
MS Office同步器研发心得(1)之自动化'
*
MS Office同步器研发心得(1)之自动化'
*  创建:2004/6/14
MS Office同步器研发心得(1)之自动化'
*
MS Office同步器研发心得(1)之自动化'
*  更新:2004/6/25 10:51
MS Office同步器研发心得(1)之自动化'
*
MS Office同步器研发心得(1)之自动化'
*  说明:
MS Office同步器研发心得(1)之自动化'
*
MS Office同步器研发心得(1)之自动化'
*************************************************************************
MS Office同步器研发心得(1)之自动化
Option Explicit
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
' Constants for characters surrounding ProgID.
MS Office同步器研发心得(1)之自动化
Public Const PROG_ID_START As String = "!<"
MS Office同步器研发心得(1)之自动化
Public Const PROG_ID_END As String = ">"
MS Office同步器研发心得(1)之自动化

MS Office同步器研发心得(1)之自动化
' Constants for menu item in Office application.
MS Office同步器研发心得(1)之自动化
Public Const MENU_TOOLS_CTL_NAME As String = "Tools"
MS Office同步器研发心得(1)之自动化
Public Const MENU_TOOLS_CTL_KEY As String = "SmartOfficeSync"
MS Office同步器研发心得(1)之自动化
Public Const MENU_TOOLS_CTL_CAPTION    As String = "智能&Office同步器"
MS Office同步器研发心得(1)之自动化
Public Const TOOLBAR_STANDARD_CTL_NAME As String = "Standard"
MS Office同步器研发心得(1)之自动化
Public Const TOOLBAR_STANDARD_CTL_KEY As String = "SmartOfficeSync2"
MS Office同步器研发心得(1)之自动化
Public Const TOOLBAR_STANDARD_CTL_CAPTION       As String = "智能Office同步器"
MS Office同步器研发心得(1)之自动化

MS Office同步器研发心得(1)之自动化
Public p_objAppInstance As Object
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化
Public Sub RaiseError(objError As ErrObject)
MS Office同步器研发心得(1)之自动化    
Dim strMsg As String
MS Office同步器研发心得(1)之自动化    
MS Office同步器研发心得(1)之自动化    strMsg 
= "错误出现在 COM add-in,名称为 '" _
MS Office同步器研发心得(1)之自动化        
& App.Title & "'." & vbCrLf & "Error #:" & objError.Number _
MS Office同步器研发心得(1)之自动化        
& vbCrLf & objError.Description
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化    
MsgBox strMsg, , "错误"
MS Office同步器研发心得(1)之自动化
End Sub
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化'添加按钮
MS Office同步器研发心得(1)之自动化
Public Function CreateAddInCommandBarButton(ByVal Application As Object, _
MS Office同步器研发心得(1)之自动化                                            ByVal ConnectMode 
As AddInDesignerObjects.ext_ConnectMode, _
MS Office同步器研发心得(1)之自动化                                            ByVal AddInInst 
As Object, _
MS Office同步器研发心得(1)之自动化                                            ByVal blnMenu 
As BooleanAs Office.CommandBarButton
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化    
Dim cbrMenu                     As Office.CommandBar
MS Office同步器研发心得(1)之自动化    
Dim ctlMenuItem                 As Office.CommandBarButton
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化    
On Error GoTo HandleError
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化    
Set cbrMenu = p_objAppInstance.ActiveExplorer.CommandBars(IIf(blnMenu, p_strMENU_TOOLS_CTL_NAME, p_strTOOLBAR_STANDARD_CTL_NAME))
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化    
Set ctlMenuItem = cbrMenu.FindControl(Tag:=IIf(blnMenu, MENU_TOOLS_CTL_KEY, TOOLBAR_STANDARD_CTL_KEY))
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化    
If ctlMenuItem Is Nothing Then
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化        
Set ctlMenuItem = cbrMenu.Controls.Add(Type:=msoControlButton, _
MS Office同步器研发心得(1)之自动化            Parameter:
=IIf(blnMenu, MENU_TOOLS_CTL_KEY, TOOLBAR_STANDARD_CTL_KEY))
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化        
With ctlMenuItem
MS Office同步器研发心得(1)之自动化            .Caption 
= IIf(blnMenu, p_strMENU_TOOLS_CTL_CAPTION, p_strTOOLBAR_STANDARD_CTL_CAPTION)
MS Office同步器研发心得(1)之自动化            .Tag 
= IIf(blnMenu, MENU_TOOLS_CTL_KEY, TOOLBAR_STANDARD_CTL_KEY)
MS Office同步器研发心得(1)之自动化            .Style 
= msoButtonCaption
MS Office同步器研发心得(1)之自动化            .OnAction 
= PROG_ID_START & AddInInst.ProgId _
MS Office同步器研发心得(1)之自动化                
& PROG_ID_END
MS Office同步器研发心得(1)之自动化        
End With
MS Office同步器研发心得(1)之自动化    
End If
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化    
Set CreateAddInCommandBarButton = ctlMenuItem
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化CreateAddInCommandBarButton_End:
MS Office同步器研发心得(1)之自动化    
Exit Function
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化HandleError:
MS Office同步器研发心得(1)之自动化    RaiseError Err
MS Office同步器研发心得(1)之自动化    
Resume CreateAddInCommandBarButton_End
MS Office同步器研发心得(1)之自动化
End Function
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化'移除按钮
MS Office同步器研发心得(1)之自动化
Public Function RemoveAddInCommandBarButton(Optional ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, _
MS Office同步器研发心得(1)之自动化                                            Optional ByVal blnMenu 
As Boolean = True)
MS Office同步器研发心得(1)之自动化    
On Error GoTo HandleError
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化    
If RemoveMode = ext_dm_UserClosed Then
MS Office同步器研发心得(1)之自动化        
On Error Resume Next
MS Office同步器研发心得(1)之自动化        p_objAppInstance.CommandBars(IIf(blnMenu, p_strMENU_TOOLS_CTL_NAME, p_strTOOLBAR_STANDARD_CTL_NAME)).Controls(IIf(blnMenu, MENU_TOOLS_CTL_KEY, TOOLBAR_STANDARD_CTL_KEY)).Delete
MS Office同步器研发心得(1)之自动化        
On Error GoTo HandleError
MS Office同步器研发心得(1)之自动化    
End If
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化RemoveAddInCommandBarButton_End:
MS Office同步器研发心得(1)之自动化    
Exit Function
MS Office同步器研发心得(1)之自动化
MS Office同步器研发心得(1)之自动化HandleError:
MS Office同步器研发心得(1)之自动化    RaiseError Err
MS Office同步器研发心得(1)之自动化    
Resume RemoveAddInCommandBarButton_End
MS Office同步器研发心得(1)之自动化
End Function
MS Office同步器研发心得(1)之自动化


(待续...)

相关文章:

  • 2021-12-26
  • 2021-11-05
  • 2022-02-19
  • 2022-12-23
  • 2021-08-30
  • 2021-05-06
  • 2021-11-07
  • 2021-08-11
猜你喜欢
  • 2022-12-23
  • 2022-03-07
  • 2021-12-22
  • 2021-11-03
  • 2022-01-31
  • 2021-12-26
  • 2022-12-23
相关资源
相似解决方案