第二部分:.NET中的Office编程
本书前两章介绍了Office对象模型和Office PIA。 您还看到如何使用Visual Studio使用VSTO的功能构建文档中的控制台应用程序,加载项和代码。 本书的第二部分更深入地介绍了Office对象模型。 如果您只对Excel开发感兴趣,请阅读第3章至第5章。如果您只对Word开发感兴趣,请阅读第6章至第9章。如果您只对Outlook开发感兴趣,请阅读第7章至第11章。如果您只感兴趣 在InfoPath开发中,阅读第12章。
第3章 Excel编程
自定义Excel的方法
Excel是Office系列中经常被编程的应用程序。 Excel具有非常丰富的对象模型,其中196个对象组合有超过4500个属性和方法。它支持多种用于集成代码的模型,包括文档中的加载项和代码。大多数这些型号最初设计为允许以VB 6,VBA,C或C ++编写的COM组件的集成。然而,通过COM互操作,用C#或Visual Basic编写的管理对象可以伪装成COM对象并参与大多数这些模型。本章简要介绍了您可以将代码与Excel集成的几种方法,并将其引用到更深入讨论这些方法的其他章节。本章还探讨了为Excel创建用户定义的函数,并介绍了Excel对象模型。
自动执行
如第2章“Office解决方案简介”中所述,与Excel集成的最简单的方法是从控制台应用程序或Windows Forms应用程序启动Excel,并从外部程序自动执行。第2章提供了自动执行Word的示例。
COM加载项
Excel可以加载一个COM加载项,它是一个包含实现IDTExtensibility2的类的DLL。实现IDTExtensibility2的类必须在注册表中注册,以便它可以被发现和通话,就像扩展Excel的其他COM加载项一样。
COM加载项通常用于添加可用于Excel打开的任何工作簿的应用程序级功能。例如,您可以编写一个COM加载项,它会添加一个菜单项,以便将所选Excel工作表单元中的货币根据当前汇率转换为另一种货币。
Excel有一个COM加载项对话框,使用户可以打开和关闭COM加载项。请注意,通过从“工具”菜单中选择“加载项”访问的对话框不是COM加载项对话框。该对话框用于打开和关闭自动化加载项和XLA加载项,这将在本章后面讨论。要访问COM加载项对话框,必须执行以下步骤:
1.右键单击Excel中的菜单或工具栏,然后从弹出菜单中选择“自定义”,或者从“工具”菜单中选择“自定义”以显示“自定义”对话框。
2.单击“自定义”对话框的“命令”选项卡。
3.从类别列表中选择工具。
4.向下滚动命令列表,直到看到一个说明COM加载项的命令。
5.拖动COM加载项命令并将其放在工具栏上。
6.关闭“自定义”对话框。
完成这些步骤后,单击您添加到工具栏的COM加载项工具栏按钮。 COM加载项对话框如图3-1所示。
图3-1 Excel中的COM加载项对话框
您可以使用“添加”按钮添加COM加载项,并使用“删除”按钮删除它们。通常,您将无法使用此对话框来管理COM加载项。相反,您将通过使用为COM加载项创建的安装程序操作注册表设置来安装和删除COM加载项。
Excel通过从注册表读取来发现已安装的COM加载项。您可以通过转到“Windows开始”菜单并选择“运行”来查看计算机上的注册表。在“运行”对话框中,键入要运行的程序的regedit,然后单击“确定”按钮。 Excel在HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ Excel \ Addins下的注册表项中查找COM加载项。 Excel还在HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Office \ Excel \ Addins下的注册表项中查找COM加载项。 COM加载项在HKEY_LOCAL_MACHINE下注册的COM加载项不会显示在COM加载项对话框中,用户无法打开或关闭。建议您不要在HKEY_LOCAL_MACHINE下注册COM加载项,因为它隐藏了用户的COM加载项。
COM加载项在第23章“开发Word和Excel的COM加载项”中有详细的讨论。
自动化加载项
自动化加载项是在注册表中注册为作为COM对象注册的类,它们公开可在Excel公式中使用的公共函数。已经安装的自动化加载项显示在加载项对话框中,您可以通过从“工具”菜单中选择“加载项”来显示。在讨论如何创建用于Excel公式的用户定义的Excel函数时,本章将更详细地检查自动化加载项。
用于Office代码的Visual Studio工具
Visual Studio 2005工具(VSTO)使您可以将C#或Visual Basic代码放在Excel模板和工作簿之后。 VSTO是从C#和Visual Basicso的基础设计的,这个模型是用于自定义Excel的所有模型中最“.NET”的。当您想自定义特定工作簿的行为或通用模板创建的特定工作簿集时,将使用此模型。例如,您可以为您公司中的任何人创建费用报告时使用的费用报告工作簿创建一个模板。该模板可以添加使用它创建的工作簿时始终可用的命令和功能。
VSTO对工作簿后面的代码的支持将在本书第三部分中详细讨论。
智能文档和XML扩展包
智能文档是将代码与Excel模板或工作簿相关联的另一种方法。智能文档依赖于将XML模式附加到工作簿或模板,并将代码与该模式相关联。模式和关联代码的组合称为XML扩展包。 XML扩展包可以通过从数据菜单中的XML菜单中选择XML扩展包与Excel工作簿相关联。图3-2显示了XML扩展包对话框。
图3-2 Excel中的XML扩展包对话框
当XML扩展包附加到工作簿时,Excel加载关联的代码并在打开该工作簿时运行它。 智能文档解决方案可以在“文档操作”任务窗格中创建自定义用户界面。 您可以通过从视图菜单中选择任务窗格来查看Excel中的任务窗格。 图3-3显示了Excel中的自定义文档操作任务窗格。
图3-3 Excel中的自定义文档操作任务窗格
可以在C#或Visual Basic中从头开始编写智能文档解决方案。这本书没有涵盖这个方法。相反,本书着重于VSTO方法,该方法旨在使智能文档开发更容易,并允许您使用Windows窗体创建自定义文档操作任务窗格。第15章“使用动作窗格”,更详细地讨论了这一功能。
智能标签
智能标签启用弹出式菜单,其中包含与工作簿中识别的文本相关的操作。您可以通过创建智能标记DLL或在文档后面使用VSTO代码来控制Excel识别的文本以及对该文本可用的操作。
智能标记DLL包含Excel使用的两种类型的组件:识别器和关联操作。识别器确定工作簿中的哪些文本被识别为智能标记。一个动作对应于弹出菜单中显示的菜单命令。
可以创建一个识别器来告诉Excel识别股票代码符号(如MSFT股票代码),并显示一组可用于该符号的动作:买入,卖出,获取最新价格,获取历史等上。例如,“获取历史记录”操作可以启动Web浏览器来显示被识别的股票符号的股票历史网页。
识别器识别某些文本时,Excel会在相关单元格的右下角显示一个小三角形。如果用户将鼠标悬停在单元格上,则单元格旁边会出现一个弹出菜单图标,用户可以单击该菜单图标,以下载识别的文本文件的操作菜单。图3-4显示了一个示例菜单。选择一个动作后,Excel会调用相关联的操作来执行代码。
图3-4 Excel中的智能标签
智能标签从“自动更正”对话框的“智能标签”页面进行管理,如图3-5所示。 您可以通过从“工具”菜单中选择“自动更正选项”来显示“智能标记”页面。 在这里,用户可以打开和关闭单个识别器,以及控制与智能标签如何在工作簿中显示的其他选项。
图3-5 “自动更正”对话框中的“智能标记”页面
VSTO提供了一个简单的模型,用于创建在工作簿或模板级别工作的智能标记。第16章“使用VSTO中的智能标签”,更详细地介绍了使用智能标签的VSTO模型。
将Smart Tag识别器和动作类写入可在应用程序级别工作的DLL,但它比VSTO模型复杂得多。第16章还描述了这种方法。
XLA加载项
加载项对话框(通过从工具菜单中选择加载项显示)也是XLA加载项。 XLA加载项将生命当作一个在其背后具有VBA代码的工作簿。然后,开发人员可以使用“文件”菜单中的“另存为”将文件另存为XLA或Excel加载项文件,并选择XLA作为文件格式。 XLA文件作为一个不可见工作簿的形式的应用程序级加载项,在Excel的生命周期中保持打开状态。虽然可以将使用VSTO定制的工作簿保存为XLA文件,但是当工作簿转换为XLA文件时,VSTO的许多功能不起作用。一些不起作用的功能包括VSTO对“文档操作”任务窗格和“智能标记”的支持。因此,Microsoft不支持或建议将使用VSTO定制的工作簿保存为XLA文件。因此,这本书没有进一步介绍。
服务器生成的文档
VSTO使您可以在服务器上编写代码,使用数据填充Excel工作簿,而无需在服务器上启动Excel。例如,您可以创建一个ASP.NET页面,它从数据库中读取一些数据,然后将其放在Excel工作簿中,并将该工作簿返回给Web页面的客户端。 VSTO提供了一个名为ServerDocument的类,可以轻松实现。您还可以使用Office的XML文件格式在服务器上以XML格式生成Excel文档,但这要复杂得多。此外,Excel XML文件格式是有损的,这意味着您无法以Excel XML格式表示Excel电子表格中的所有内容。因此,在Excel XML文件格式的服务器上生成文档时,我们更喜欢使用ServerDocument方法。
第18章“服务器数据场景”介绍了使用ServerDocument在服务器上生成文档。
研究服务
Excel具有称为“研究”任务窗格的任务窗格,使您能够输入搜索词并搜索该搜索词的各种来源。图3-6显示了研究任务窗格。
图3-6 研究任务窗格
Excel使开发人员能够编写一个名为研究服务的特殊Web服务,实现由Excel定义的一组Web方法。 可以在Excel中注册研究服务,并在Office的研究任务窗格中使用。 例如,您可以编写一个在公司数据库中搜索搜索字词的研究服务。
第6章“编程词”讨论了更详细地创建研究服务。