`

使用.Net访问Office编程接口(PIA和IA的区别)

阅读更多

篇文章里面,我将向大家介如何在.Net访问Office所公程接口。其,不管是使用哪具体的技针对Office开发(比如VSTO,或者用C#写一个Office Add-in,或者在一个WinForms程序中Office的功能,甚至在一个ASP.NET用的服器端启一个Excel程),只要是基于.Net平台,篇文章所描述的内容都是有价的。

篇文章以及后的文章中,所有的演示都将基于Office 2003 ProfessionalVisual Studio 2005。使用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件的。

(一)Interop Assembly

.Net Framework中,提供了一叫做COM Interop的技这项就是专门用于.Net中直接访问COM件的。它的基本原理是,.Net Framework动针对某一个COM件,帮助开发生成一个Interop Assembly(互用程序集,后面IA),IA是一个完全的托管程序集。IA中的名称空、方法等等,都是针对那个COM对应的。在我.Net程序中,我可以直接引用IA,并且用里面相的方法,这时IA就会帮我再去访问真正的COM件里面的相方法。最后的效果就是,在我自己的用程序中,只需要用一个.NetIA即可。

下面的明了IA是如何帮我的程序访问COM件的。

生成一个IA的方法非常简单,当我Visual Studio开发环境中添加一个新的COM件引用Visual Studio就会自帮我生成一个相IA。如下,我示范在一个目中引用Microsoft XML 5.0件。

当在上中点OKVisual Studio就已动为生成了一个针对Microsoft XML 5.0件的IA。打开项目目obj\debug,就能看到一个名称Interop.MSXML2.dll的程序集文件,个文件就是自生成的IA,并且在目中,Visual Studio也自引用了IA程序集。如下

(二)Primary Interop Assembly

在自己的用程序中,访问Office COM件的方法的基本原理,就如同下面所述,都是通COM Interop,透IA接的访问Office中的COM件。但是针对Office件,有一点点特殊的区,那就是我应该自己在Visual Studio中生成一个“自己的”访问Office COMIA,而需要使用微提供的“官方的”PIA

PIA的意思可以理解“官方互操作程序集”,它和IA最主要的区如下:

1IA是由开发开发机器上通生成的,PIA是由件厂商(针对Office件而言,就是指微)提供的;

2PIA经过了厂商的理,使之更容易被.Net用;

(三)Office Primary Interop Assembly

所以,我应该使用PIA访问Office COM件,而不应该使用IA。那如何把Office PIA安装到我电脑上呢?

如果我的机器上已安装了.Net Framework,那在安装Office,在安装向的高自定义选项中,我件(WordExcelPowperPoint等)的子选项中,都能看到一个“.NET程性支持”,选择安装它,Office2003的安装程序就会自PIA安装到我算机上。

另外,Office PIA的客端分(就是们软件的用一装上PIA),微软专门提供了一个安装包。可以在http://www.microsoft.com/downloads/details.aspx?FamilyID=3c9a983a-ac14-4125-8ba0-d36d67e0f4ad&DisplayLang=en个分安装包。

Office PIA按照Office的各个件(WordExcelPowerPointOutlook等),分成多个独的程序集。比如Word对应PIA程序集是Microsoft.Office.Interop.Word.dll(程序集里面的都放在命名空Microsoft.Office.Interop.Word中),Excel对应的程序集是Microsoft.Office.Interop.Excel.dll(程序集里面的都放在命名空Microsoft.Office.Interop.Excel中)。另外,Office公用的一些件(比如菜单栏)放在一个独的程序集中:Office.dll对应的命名空Microsoft.Office.Interop.Core)。

如果我开发机器上已安装好了Office PIA,那当我上面所述的方法,在Visual Studio中引用Office COMVisual Studio检测到本机已安装了Office PIA,然后,它会直接引用安装好了的PIA,而不会再自生成一个新的IA

如下,我Visual Studio中添加一个Word COM件的引用(WordCOM件列表中是“Microsoft Word 11.0 Object Library”,相似的,ExcelOutlookPowerPointCOM件名称都遵循律)。

在上中点OK后,在目管理器中就可以看到,Visual Studio帮我引用了需要引用的件。实际上,除了我们选择要引用的Word件外,其他外但是必需的Microsoft.Office.CorestdoleVBIDE件也已被自引用来了。

在上Word件引用上点看它的属性,在它的路径属性中,我可以看到PIA文件其是在“C:\Windows\assembly\...”中,个目也就是我机器上的全局程序集存(GACGlobal Assembly Cache)所在的目是因Office PIA是被安装到机器上的GAC中,所以Office PIA的引用会直接指向GAC中的相文件。

二、深入浏览Office PIA

如果者曾使用VBA过开发(或者使用其他的开发工具VB/VC/Delphi直接Office),那你已经对Office COM接口有了一定的了解,因VBA编辑器中所写的操作ApplicationDocumentRange的代,其正是在操作Office COM件中的ApplicationDocumentRange

知道,在Office PIA中,已Office COM行了封装,所以我可以预见一个Office COM件中的或者接口,在Office PIA的程序集中,我们应该都能找到一个对应或者接口。接下来,我就用浏览器直接打Office COM件,然后再打Office PIA这样就可以照它,更清楚的理解它

font-family:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics