VSTO:使用C#开发Excel、Word【8】

office加载项
Office开发中使用的第二种模式是加载项模式。本书涵盖了几种Office加载项。其中包括Outlook的VSTO加载项,Excel和Word的COM加载项以及Excel的自动化加载项:

用于Outlook的VSTO加载项这个新的VSTO功能使得为Outlook 2003创建加载项变得非常容易。该模型是所有加载项模型中最体现“.NET”特色的,并且与模型后面的VSTO代码非常相似文件。第24章“使用VSTO创建Outlook加载项”详细描述了该模型。

Excel和Word的COM加载项类库项目中的C#类可以实现IDTExtensibility2接口,并在注册表中注册为COM对象和COM加载项。通过COM互操作,Office创建C#类并与之通信。第23章“开发Word和Excel的COM加载项”介绍了COM加载项的创建以及使COM加载项开发成为问题的一些问题。

Excel的自动化加载项这些托管类会公开Excel可以在公式中使用的公共函数。 C#类必须在注册表中注册为COM对象。通过COM互操作,Excel可以创建自动化加载项,并在公式中使用其公共方法。自动化插件及其在Excel公式中的使用在第3章“编程Excel”中讨论。

本书不讨论一些Office加载项技术。智能文档加载项不被讨论,因为VSTO提供了一种更简单的访问智能文档功能的方式,尽管在文档或模板级而不是在应用程序级别。有关VSTO对智能文档支持的更多信息,请参见第15章“使用操作窗格”。

在VSTO中创建Outlook加载项
要在VSTO中创建Outlook加载项目,请从Visual Studio的“文件”菜单的“新建”菜单中选择“项目”。从项目类型列表中选择Visual C#节点,然后选择Visual C#节点下的Office节点。 Outlook加载项目将显示在模板列表中。键入新的Outlook加载项目的名称,并选择项目的位置。然后单击确定按钮。

VSTO创建一个项目,其中引用了Outlook 2003 PIA,核心Office PIA和其他需要的引用,如图2-6所示。 VSTO还将项目项目添加到名为ThisApplication.cs的项目中。此项目项目包含一个C#类,您将在实现Outlook加载项时添加该类。

如果双击ThisApplication.cs项目项,您将看到如清单2-4所示的代码。 有一个简单的启动和关闭事件处理程序,您可以在其中编写在加载项的启动和关闭时执行的代码。 ThisApplication类派生于Outlook Application对象的聚合。 这允许您通过在ThisApplication类中编写如this.Inspectors.Count等代码来访问Outlook Application对象的属性和方法。

清单2-4  Outlook加载项目中的此应用程序类中的初始代码

using System;
using System.Windows.Forms;
using Microsoft.VisualStudio.Tools.Applications.Runtime;
using Outlook = Microsoft.Office.Interop.Outlook;

namespace OutlookAddin1
{
  public partial class ThisApplication
  {
    private void ThisApplication_Startup(object sender, EventArgs e)
    {
    }

    private void ThisApplication_Shutdown(object sender, EventArgs e)
    {
    }

    #region VSTO Designer generated code
    private void InternalStartup()
    {
      this.Startup += new System.
        EventHandler(ThisApplication_Startup);
      this.Shutdown += new System.
        EventHandler(ThisApplication_Shutdown);
    }
    #endregion
  }
}

看看清单2-4 你可能会想到在类定义中使用partial
VSTO使用部分类,这是.NET的一个新功能,可以让您在一个文件中定义一部分类,另一部分将另一部分定义为一个类。 VSTO使用此功能来隐藏与ThisApplication类相关联的一些其他生成的代码,以减少编写代码的类的复杂性。最后的ThisApplication类将从清单2-4中的部分类中编译,并在VSTO生成的部分类中隐藏的附加代码。

InternalStartup方法由VSTO生成,用于连接VSTO生成的任何事件处理程序。这是启动和关闭事件处理程序挂钩的地方。你不应该编辑这段代码。我们可能会在本书的某些列表中省略此代码块,但代码块必须在等级中,类将无法编译。

我们将添加到清单2-4中的代码,以创建一个加载项,它将解决一个烦人的问题,他们无意中回复了发送到包含大量人员的邮件别名的电子邮件。除非您的头衔中有“副总裁”,否则您可能不想在任何时候发送电子邮件至25位以上的人士。我们将创建一个附加组件,如果您这样做,将会提醒您,并提供“这是潜在的职业限制措施。您确定要将此电子邮件发送给2.5万人吗?”信息。

Outlook的Application对象有一个ItemSend事件,每当用户发送一个电子邮件时都会产生。我们将为ThisApplication类的Startup方法添加附加代码,以连接ItemSend事件的事件处理程序,如清单2-5所示。因为ThisApplication类源自Outlook的Application对象的聚合,所以我们可以编写this.ItemSend代码,因为ItemSend是由ThisApplication基类引发的一个事件。 ItemSend事件处理程序接受一个名为item的对象参数,它是要发送的Outlook项。因为项目可以是诸如会议请求或电子邮件消息的许多事物中的任何一个,所以项目作为对象而不是特定类型被传递。 ItemSend事件处理程序还具有通过引用传递的bool参数,该引用称为cancel,可以设置为true以防止发送Outlook项目。

在我们的ItemSend事件处理程序中,我们需要检查是否作为对象传递的item参数实际上是一个电子邮件。实现此目的的最简单方法是使用as关键字来尝试将item参数转换为Outlook.MailItem。如果转换成功,则结果值将为非空值,我们将知道正在发送的项目是Outlook.MailItem,因此是电子邮件。然后,我们可以遍历MailItem对象上的收件人集合,并检查是否发送到包含超过25个人的任何收件人列表。收件人集合中的每个收件人对象都具有返回AddressEntry对象的AddressEntry属性。 AddressEntry对象具有一个Members属性,返回一个可以检查计数的集合。如果我们发现计数超过25,我们将显示一个对话框,并询问用户是否真的要发送邮件。如果用户单击“否”按钮,我们将将ItemSend事件的cancel参数设置为true,以取消发送职业限制电子邮件。

清单2-5 一个处理ItemSend事件并检查超过25个收件人的VSTO Outlook加载项

using System;
using System.Windows.Forms;
using Microsoft.VisualStudio.Tools.Applications.Runtime;
using Outlook = Microsoft.Office.Interop.Outlook;

namespace OutlookAddin1
{
  public partial class ThisApplication
  {
    private void ThisApplication_Startup(object sender, EventArgs e)
    {
      this.ItemSend += new
        Outlook.ApplicationEvents_11_ItemSendEventHandler(
        ThisApplication_ItemSend);
    }

    void ThisApplication_ItemSend(object item, ref bool cancel)
    {
      Outlook.MailItem myItem = item as Outlook.MailItem;

      if (myItem != null)
      {
        foreach (Outlook.Recipient recip in myItem.Recipients)
        {
          if (recip.AddressEntry.Members.Count > 25)
          {
            // Ask the user if she really wants to send this e-mail
            string message = "Send mail to {0} with {1} people?";
            string caption = "More than 25 recipients";
            MessageBoxButtons buttons = MessageBoxButtons.YesNo;
            DialogResult result;

            result = MessageBox.Show(String.Format(message,
              recip.AddressEntry.Name,
              recip.AddressEntry.Members.Count),
              caption, buttons);

            if (result == DialogResult.No)
            {
              cancel = true;
              break;
            }
          }
        }
      }
    }

    private void ThisApplication_Shutdown(object sender, EventArgs e)
    {
    }

    #region VSTO Designer generated code
    private void InternalStartup()
    {
      this.Startup += new System.
        EventHandler(ThisApplication_Startup);
      this.Shutdown += new System.
        EventHandler(ThisApplication_Shutdown);
    }
    #endregion
  }
}

当您使用代码清单2-4所示的代码运行项目时,Outlook将启动加载项加载。 尝试发送一个包含超过25个人的别名的邮件,您可能希望首先离线,以防您错误地输入代码。 如果所有功能正确,加载项将显示一个对话框,警告您向25位以上的人发送电子邮件,您将可以取消发送电子邮件。 退出Outlook以结束调试会话。

第24章“使用VSTO创建Outlook加载项”更详细地讨论了VSTO Outlook加载项。 第9至11章“编程Outlook”,“使用Outlook事件”和“使用Outlook对象”分别讨论了Outlook对象模型。

时间: 2024-10-27 10:52:19

VSTO:使用C#开发Excel、Word【8】的相关文章

VSTO:使用C#开发Excel、Word【9】

文件背后的代码VSTO支持文档背后的代码,要求开发人员使用VSTO项目中生成的具有预连接上下文和预连接事件的类.这些类有时被称为"代码后面"类,因为它们是与特定文档或工作表相关联的代码.在Word中,与文档对应的类后面有一个代码.在Excel中,工作簿中的classone有多个代码,工作簿中的每个工作表或图表工作表都有一个代码. 您的代码在文档项目后面的VSTO代码中第一次运行时,当Office引发由为您创建的类后面的任何代码处理的Startup事件. VSTO通过您正在编写代码的类的

VSTO:使用C#开发Excel、Word【10】

第二部分:.NET中的Office编程本书前两章介绍了Office对象模型和Office PIA. 您还看到如何使用Visual Studio使用VSTO的功能构建文档中的控制台应用程序,加载项和代码. 本书的第二部分更深入地介绍了Office对象模型. 如果您只对Excel开发感兴趣,请阅读第3章至第5章.如果您只对Word开发感兴趣,请阅读第6章至第9章.如果您只对Outlook开发感兴趣,请阅读第7章至第11章.如果您只感兴趣 在InfoPath开发中,阅读第12章. 第3章  Excel

VSTO:使用C#开发Excel、Word【1】

<Visual Studio Tools for Office: Using C# with Excel, Word, Outlook, and InfoPath >--By Eric Carter, Eric Lippert 概观"随着应用开发社区如此专注于智能客户端革命,一本涵盖从A到Z的VSTO的书是重要和必要的,这本书有很大的期望,它是彻底的,有大量的示例代码,涵盖了Office编程一般术语可以是多年来专注于ASP.NET应用程序的经验丰富的.NET开发人员的外部话题.感谢

VSTO:使用C#开发Excel、Word【5】

第一部分:VSTO介绍本书的第一部分介绍了Office对象模型和Office主互操作程序集(PIA).您还将学习如何使用Visual Studio使用Visual Studio 2005 Tools for Office(VSTO)的功能来构建文档后面的自动化可执行文件,加载项和代码. 第一章"办公编程介绍"介绍了Office对象模型,并对其基本结构进行了研究.本章介绍如何使用对象,集合和枚举所有Office对象模型中找到的基本类型.您还将学习如何使用Office对象模型中的对象和集合

VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式

原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Excel的内置公式虽然强大,但是在ERP等系统中,往往需要进行很多业务上的计算,如收发存台账.指定年.月.部门的消耗查询等,都是需要从数据库中查询的,且和业务紧密相连.这时仅仅依靠Excel的内置公式就不够了,需要添加自定义的公式来进行这些业务计算. 测试代码下载 本系列所有测试代码均在Visual St

我的VSTO之路(三):Word基本知识

原文:我的VSTO之路(三):Word基本知识 在前一篇文章中,我初步介绍了如何如何开发一个VSTO程序,在本文中,我将进一步深入介绍Word的插件开发.Word是一个大家在日常工作中一直接触的文档工具,也是微软最赚钱的产品之一.从最初的Word 1.0到现在的Word 2010历经了13代的演化,已经成为了一个比较复杂的系统.(这里稍微跑题一下,Office 2010的版本代号是version 14,但是我为什么说Word一共演化了13代呢?因为Office并没有Version 13,上一代的

C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二)

本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一) 上个帖子主要是讲了如何读取Excel,本帖主要是讲述读取的Excel数据是如何序列化成二进制的,考虑到现在在手游中应用很广泛的序列化技术Google的ProtoBuf,所以本文也是按照ProtoBuf的方式来操作的.ProtoBuf是一个开源库,简单来说ProtoBuf就是一个能使序列化的数据变得更小的类库,当然这里指的更小是相对的.好了ProtBuf的东西就不在多说,以后会专门写一篇帖子的.本帖其实就相当于上

C# Unity游戏开发——Excel中的数据是如何到游戏中的 (三)

本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二) 前几天有点事情所以没有继续更新,今天我们接着说.上个帖子中我们看到已经把Excel数据生成了.bin的文件,不过其实这样到游戏中还是不能用的.主要有两个方面,1.bin文件的后缀使我们随便取的名字,但是这种文件Unity不买账.因为Unity中的二进制文件必须是以.bytes命名的.2.在写文件之前其实还可以对二进制进行压缩,这样可以最大化节省设备空间.也就是说我们在生成数据实例后还需要做以下几件事:序列化 -

.net 后台导出excel ,word

前台代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="BTBW_rk.aspx.cs" Inherits="lxl_HXYRK_BTBW_rk" %> <%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral,

Aspose&#160;强大的服务器端 excel word ppt pdf 处理工具

Aspose 强大的服务器端 excel word ppt pdf 处理工具 http://www.aspose.com/java/word-component.aspx Aspose 强大的服务器端 excel word ppt pdf 处理工具