最佳实践:使用.Net访问Office编程界面_IT /计算机_数据

电脑杂谈  发布时间:2020-09-20 16:05:47  来源:网络整理

office预览接口_java面向接口编程_office编程接口

在本文中,我将向您展示如何在.Net中访问Office的开放式编程接口。实际上,无论使用哪种特定技术为Office开发(例如VSTO),还是用C#编写Office加载项,或者在WinForms程序中甚至在ASP.NET应用程序的服务器端调用Office函数。启动一个Excel进程),只要它基于.Net平台,本文中描述的内容都是有价值的。在本文和后续文章中,所有演示都将基于Office 2003 Professional和Visual Studio2005。使用Visual Studio 2005并不意味着我们不能使用这些方法来访问Visual Studio 2003中的Office编程接口。相反,几乎本文和后续文章中的所有演示都可以在Visual Studio 2003中完成。之所以使用Visual Studio 2005,是因为我喜欢其更好的IDE功能。 :)一、Office PIA在第一篇文章中曾说过,Office编程接口是通过COM组件公开的。任何访问Office编程接口的程序都必须实际调用Office COM组件。

如果您是从事Windows平台开发时间不长的程序员,并且开始学习和使用.Net,则可能会再次感到沮丧。幸运的是,.Net使开发人员可以轻松访问COM组件。我将使用尽可能简单明了的描述来使每个人都了解我们如何访问.Net中的Office COM组件。 ([K1] Interop程序集在.Net Framework中提供了一种称为COM Interop的技术。该技术经过专门设计,允许我们直接访问.Net代码中的COM组件。其基本原理是。NetFramework可以自动将COM组件定位到帮助开发人员生成Interop程序集(Interop程序集,以下简称IA)。IA是完全托管的程序集。IA中的名称空间,类,方法等全部用于该COM组件。在我们的.Net程序中,我们可以直接引用该IA并在其中调用相关方法,然后IA将帮助我们访问实际COM组件中的相应方法,最后的效果是,在我们自己的应用程序中,我们只需要调用一个纯.Net IA。下图说明了IA如何帮助我们的程序访问COM组件。

生成IA的方法非常简单。当我们在Visual Studio开发环境中添加新的COM组件引用时,Visual Studio将自动为我们生成一个相应的IA。如下图所示,我们演示了在项目中使用Microsoft XML5.0组件。当您单击上图中的“确定”按钮时,Visual Studio将自动为Microsoft XML5.0组件生成一个IA。打开项目目录的obj \ debug目录,您可以看到一个名为Interop.MSXML2.dll的程序集文件,该文件是自动生成的IA,在项目中,Visual Studio也会自动引用此IA程序集。如下所示。 (二)主互操作程序集在我们自己的应用程序中,如下所述,访问Office COM组件的方法的基本原理是通过COM Interop和IA间接访问Office中的COM组件。但是对于Office软件,存在有一点特殊的区别,那就是我们不应该生成一个“自己的” IA来访问Visual Studio中的Office COM,而需要使用Microsoft提供的“正式的” PIA。

java面向接口编程_office预览接口_office编程接口

PIA的含义可以理解为“官方互操作性组装”。它与IA之间的主要区别如下:1、IA由开发人员在开发计算机上通过向导自动生成,而PIA由软件供应商生成(对于Office软件,它是指Microsoft);2、PIA已由制造商优化,使其更易于被.Net调用; (三)Office Primary Interop Assembly因此,我们都应该使用PIA Access Office COM组件,而不要使用IA。那么如何在我们的计算机上安装Office PIA?如果.Net Framework已经安装在我们的计算机上,则在安装时Office,在安装向导的高级自定义选项中,在每个组件(Word,Excel,PowperPoint等)的子选项中,我们可以看到“ .NET可编程性支持”。选择安装它,然后安装Office2003程序会自动向我们安装PIA。此外,对于Office PIA的客户端分发(即,我们软件的所有用户都安装PIA),Microsoft提供了一个安装软件包,您可以从4-4125-8ba0-d36d67e0f4ad&DisplayLang = en下载此发行版安装包。

Office PIA根据Office的各种组件(Word,Excel,PowerPoint,Outlook等)分为多个单独的程序集。例如,与Word对应的PIA程序集是Microsoft.Office.Interop.Word.dll(程序集中的类位于名称空间Microsoft.Office.Interop.Word中),而与Excel对应的程序集是Microsoft.Office。互操作。 Excel.dll(程序集中的类位于Microsoft.Office.Interop.Excel命名空间中)。此外,某些Office通用的组件(例如菜单栏)被放置在单独的程序集中:Office.dll(对应的命名空间为Microsoft.Office.Interop.Core)如果我们的开发机器上已经安装了Office PIA,则当我们通过上述方法在Visual Studio中引用Office COM组件,Visual Studio将检测到计算机上已经安装了Office PIA,然后它将直接引用已安装的PIA,而不是自动生成新的IA。

如下图所示,我们在Visual Studio中添加了对Word COM组件的引用(Word是COM组件列表中的“ Microsoft Word 11.0对象库”,类似地,Excel,Outlook,PowerPoint COM组件名称遵循此规则)。单击上图中的“确定”按钮后,您可以在项目管理器中看到Visual Studio帮助我们引用了需要引用的组件。实际上,除了我们选择引用的Word组件之外,还自动引用了其他附加但必需的组件,例如Microsoft.Office.Core,stdole,VBIDE等。在上图中的Word组件引用上单击鼠标右键以查看其属性。在其路径属性中,我们可以看到PIA文件实际上位于“ C:\ Windows \ assembly \ ...”目录中。该目录是我们计算机上的全局程序集缓存(GAC)所在的目录。这是因为Office PIA已安装在计算机上的GAC中,因此对Office PIA的引用将直接指向GAC中的相应文件。

office编程接口_office预览接口_java面向接口编程

二、深入浏览Office PIA如果读者使用VBA进行开发(或使用其他开发工具(例如VB / VC / Delphi直接调用Office)),那么您已经对Office COM有所了解界面了解,因为用VBA编辑器编写的诸如Application,Document和Range之类的操作代码实际上是在Office COM组件中操作Application,Document和Range类。我们已经知道Office COM组件已封装在Office PIA中,因此可以预见,对于Office COM组件中的每个类或接口,我们应该能够在Office PIA的程序集的类或接口中找到一个对应的类。接下来,我们将使用对象浏览器直接打开Office COM组件,然后打开Office PIA,以便我们可以比较它们并更清楚地了解它们。在Visual Studio中,在“视图”菜单中打开“对象浏览器”,然后在“对象浏览器”中单击“添加其他组件”按钮。在出现的选择窗口中,在COM组件中选择“ Microsoft Word 11对象库”,然后选择“对象浏览器”。计算机直接打开Word 2003的COM组件,如下图所示。

在上图所示的Word COM组件成员列表中,您可以看到我选择了Word中Application类的Quit()方法。 Application类可以说是每个Office组件的核心类。无论是Word,Excel还是PowerPoint,都有一个对应的Application类,它对应于Word,Excel和PowerPoint的主程序。如果要直接在我们的程序中打开Word,则需要创建Application类的实例。如果要关闭新打开的Word程序,请调用新创建的Application对象的Quit()方法。接下来,我们使用对象浏览器在Office PIA中打开与Word对应的程序集。在前面的步骤中,我们在项目中引用了Word的PIA。在项目管理器的引用列表中选择Word,单击鼠标右键,然后在“对象浏览器”中选择“查看”,然后可以在“对象浏览器”中打开Word。如下所示。如果您浏览上图所示的Microsoft.Office.Interop.Word命名空间中包含的类,我相信读者会发现一件非常有趣的事情。

实际上,Word的PIA中的类和接口与Word的COM组件中的类和接口不对应。例如,我们可以在Word COM组件中看到一个名为Application的类,但是在Word的PIA中,我们只能找到一个名为Application的接口和一个名为ApplicationClass的类。这种情况的原因是。 Net COM Interop(特别是.Net SDK中的TlbImp.exe命令行工具)可帮助我们基于COM组件生成Interop程序集,但不会针对COM组件一一生成。 .Net类和接口。相反,它将根据某些规则生成相应的.Net类和接口。由于应用程序是Word编程接口中最重要的部分,因此我将特别关注Word中的应用程序接口并简要说明其转换规则(实际生成的接口和类比下面描述的要多,并且相关的关系也更复杂。 )。首先,Word PIA将生成一个_Application接口,此_Application接口基本上描述了Word COM组件中Application类中的所有操作和属性,然后Word PIA还将生成多个ApplicationEvents_Event系列接口(ApplicationEvents2_Event,ApplicationEvents3_Event,ApplicationEvents4_Event接口。 ..我们可以忽略这些具体细节),此接口基本上描述了Word COM组件中Application类中的所有事件。

office预览接口_java面向接口编程_office编程接口

然后,将在Word PIA中生成Applicatin接口,该接口实现_Application接口和ApplicationEvents_Even接口。通过这种方式,Application接口基本上在Word COM组件的Application类中描述了所有操作,属性,事件等。最后,在Word PIA中生成一个特定的ApplicationClass类,该类实现了Applicatin接口。如果您对上面的描述感到头昏眼花,那么请记住:在Word PIA中,我们有一个Application接口和一个ApplicationClass类。 Application接口描述了相应的Word COM组件中的应用程序类。所有成员,ApplicationClass类是特定的实现类三、代码WalkThrough:一个.Net WinForms程序,经过很长一段时间并且几乎没有阅读上面的冗长的文字之后,终于可以看到特定的演示了。我们需要用C#编写Windows应用程序。在此程序中,启动Word,使用代码对其进行操作以执行一些操作,然后将其关闭。

首先,我们创建一个新的C#Windows应用程序,然后使用上述方法在项目中引用Word的PIA(在添加引用的界面中,在COM组件列表中选择Microsoft Word 11对象库)。在自动创建的启动表单上,放置两个Button控件,一个叫做btnStartWord,另一个叫做btnStopWord。我们希望当用户单击btnStartWord时,我们的程序将自动启动Word,然后创建一个新的Word文档,然后自动将其保存在磁盘上。当用户单击btnStopWord时,Word将关闭。表单设计视图如下。在此主窗体类的源代码中,我们引用Word PIA的名称空间,我们使用MSWord替换Microsoft.Office.Interop.Word的完整名称空间名称:使用MSWord = Microsoft.Office.Interop.Word;在主表单类的源代码中,添加一个类级别的成员,_wordApp是一个Application类型对象(记住:MSWord.Application是一个接口!):private MSWord.Application _wordApp = null;然后在btnStartWord按钮的click事件中,在代码中,添加以下代码以创建一个新的Word实例,然后显示它:_wordApp = new MSWord.Application(); _wordApp.Visible = true;看到这一点,很都非常怀疑,那就是MSWord .Application实际上是一个接口,那么如何通过“ new MSWord.Application()”创建Word实例呢?我们不应该使用“ new MSWord.ApplicationClass()”来做到这一点吗?毕竟,ApplicationClass是实现Application接口的具体类。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shumachanpin/article-320681-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...