65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 .NET 构建您自己的 Microsoft Office 加载项

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.68/5 (12投票s)

2005年12月10日

2分钟阅读

viewsIcon

121777

downloadIcon

2672

如何使用 C# 为支持加载项的 Microsoft 应用程序构建加载项。

Sample image

引言

在本文中,我们将学习如何为支持加载项的 Microsoft 应用程序创建一个简单的 Hello World 浏览器加载项。 以下是此类应用程序的列表:

  1. Microsoft Word
  2. Microsoft VSMacros IDE
  3. Microsoft Visual Studio .NET
  4. Microsoft Visio
  5. Microsoft Publisher
  6. Microsoft Project
  7. Microsoft PowerPoint
  8. Microsoft Outlook
  9. Microsoft FrontPage
  10. Microsoft Excel
  11. Microsoft Access

在本文中,我们将以 Microsoft Outlook 为例。

必备组件

您必须具备以下条件…

  1. Microsoft Development Environment 2003 或更高版本
  2. Microsoft .NET Framework 2.0
  3. Office Primary Interop Assemblies (PIAs)。 对于 Office XP,单击此处下载

创建加载项

  • 运行 Microsoft Development Environment。
  • 转到文件> 新建项目>,将出现一个对话框。
  • 转到其他项目> Extensibility Project,选择共享加载项类型项目模板。

加载项向导

加载项向导启动后,按下一步...

Sample image

选择编程语言(例如 C#),按下一步。

Sample image

选择要在其中托管加载项的应用程序,按下一步。

Sample image

提供加载项名称和描述,按下一步。

Sample image

选择加载项选项,按下一步。

Sample image

按完成。

Sample image

设置项目

将自动添加两个项目。

  1. 加载项项目。
  2. 设置项目。

创建浏览器窗体

  1. 为加载项项目添加一个名为frmHelloWorld.cs的窗体。
  2. 添加一个LabelTextBox和一个PictureBox
  3. 向窗体添加一个 Microsoft Web 浏览器控件(您可以通过右键单击工具箱,选择“添加/删除项”,然后单击“COM 组件”来获取它:将列出许多控件,选择 Microsoft Web 浏览器控件,然后按确定)。
  4. 使用以下代码,创建一个函数go()
void go()
{
    try
    {
        stbPanel1.Text="Trying to open "+tbURL+"..." ;
        object obj=new object ();
        browser.Navigate(tbURL.Text,ref obj,ref obj,ref obj,ref obj);
    }
    catch(Exception ex)
    {
        //error hanlder here......
    }
}

PictureBoxClick事件中调用此函数。

加载项连接编程

安装 PIAs 并添加对以下 DLL 的引用:Microsoft.Office.Interop.Outlook.DLL

Sample image

加载项项目中会有一个文件connect.cs,打开它。 全局声明以下项目

//for Outlook Express you can mention here word, power point. 
private Microsoft.Office.Interop.Outlook.Application applicationObject; 
private object addInInstance; 
private CommandBarButton btnLaunch;

在函数OnStartupComplete中,编写以下代码

public void OnStartupComplete(ref System.Array custom)
{
    CommandBars commandBars = 
        applicationObject.ActiveExplorer().CommandBars;

    try
    {
        //if will be good if button exist use it
               btnLaunch= (CommandBarButton)
            commandBars["Standard"].Controls["HelloWorld"];
    }
    catch
    {
        //if error occur
                 btnLaunch = (CommandBarButton)
            commandBars["Standard"].Controls.Add(1, 
            System.Reflection.Missing.Value, 
            System.Reflection.Missing.Value, 
            System.Reflection.Missing.Value, 
            System.Reflection.Missing.Value);
        btnLaunch.Caption = "Hello World Browser!";
        btnLaunch.Style = MsoButtonStyle.msoButtonCaption;
    }
    //use tag for quick access of button.
    btnLaunch.Tag = "This is Hello World Browser!";


    btnLaunch.OnAction = "!<EMAILSTATSADDIN.CONNECT>";
    btnLaunch.Visible = true;
    btnLaunch.Click += new 
        _CommandBarButtonEvents_ClickEventHandler(
        btnLaunch_Click);
}

在函数OnBeginShutdown中,编写以下代码

public void OnBeginShutdown(ref System.Array custom)
{
    //delete our button...
    CommandBars commandBars = applicationObject.ActiveExplorer().CommandBars;
    try
    {
        //remove on unload...
        commandBars["Standard"].Controls["HelloWorld"].Delete(
                             System.Reflection.Missing.Value);
    }
    catch(System.Exception ex)
    {
        //code to show/log error...
    }
}

btnLanuch事件处理程序中编写以下代码

private void btnLaunch_Click(CommandBarButton Ctrl, 
                            ref bool CancelDefault)
{
    try
    {
        frmHelloWorld objfrmHelloWorld=new frmHelloWorld ();
        objfrmHelloWorld.Show();  
    }
    catch(Exception ex)
    {
        //code to show or log error...
    }
}

重新生成和安装

右键单击设置项目,单击重新生成,它将自动重新生成加载项和设置项目。 然后,右键单击设置项目,然后单击安装。

运行

运行 Microsoft Outlook,您将在工具栏上看到“Hello World Browser!”。 单击它,您的加载项将启动。 正如您在此处看到的...

Sample image

已知问题

卸载后,“Hello World Browser!”按钮未从 Outlook 工具栏中删除。

© . All rights reserved.