- 浏览: 518384 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (299)
- Oracle(pl/sql_Erp_Pro*C) (69)
- 设计模式 (4)
- spring (23)
- ext (17)
- apache开源项目应用 (4)
- jquery (16)
- 生活琐事 (8)
- 下载资源 (23)
- mysql (2)
- Eclipse使用积累 (5)
- 报表类(报表/图表) (13)
- php (4)
- Web多彩文本框 (3)
- json (4)
- jqgrid (2)
- ant (2)
- java算法积累 (8)
- EL表达式/JSTL (4)
- poi (3)
- gwt (2)
- 爬网第一步 (2)
- javascript (17)
- Javaweb (8)
- tomcat (1)
- flex (1)
- Java&DB (3)
- J2SE (7)
- linux (3)
- 数据结构 (1)
- dot net (5)
- struts (1)
- ibatis (1)
- log4j (1)
- 项目管理 (1)
- Java native interface(jni,jacob......) (5)
- applet (1)
- VB.net/C#.net/JNI (20)
- css (1)
- Sqlite (1)
- servlet (1)
- REST (1)
最新评论
-
wenhurena:
能不能给一下解压密码roki.work.2017@gmail. ...
Ebs解体新書と学習資料1 -
liutao1600:
楼主写的太好了,每天学习~~
Spring_MVC(6)测试 -
liutao1600:
太好了,每天学习你的文章~~~
Spring_MVC(3)表单页面处理 -
liutao1600:
学习了,太好了
Spring_MVC(2)控制层处理 -
liutao1600:
学习了~~~
Spring_MVC(1)构建简单web应用
在这篇文章里面,我将向大家介绍如何在.Net中访问Office所公开的编程接口。其实,不管是使用哪种具体的技术来针对Office进行开发(比如VSTO,或者用C#编写一个Office Add-in,或者在一个WinForms程序中调用Office的功能,甚至在一个ASP.NET应用的服务器端启动一个Excel进程),只要是基于.Net平台,这篇文章所描述的内容都是有价值的。
在这篇文章以及后续的文章中,所有的演示都将基于Office 2003 Professional和Visual 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组件里面的相应方法。最后的效果就是,在我们自己的应用程序中,只需要调用一个纯粹.Net的IA即可。
下面的图片说明了IA是如何帮我们的程序访问到COM组件的。
生成一个IA的方法非常简单,当我们在Visual Studio开发环境中添加一个新的COM组件引用时,Visual Studio就会自动帮我们生成一个相应的IA。如下图,我们示范在一个项目中引用Microsoft XML 5.0组件。
当在上图中点击OK按钮,Visual 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 COM的IA,而需要使用微软提供的“官方的”PIA。
PIA的意思可以理解为“官方互操作程序集”,它和IA最主要的区别如下:
1、IA是由开发人员在开发机器上通过向导自动生成的,PIA是由软件厂商(针对Office这个软件而言,就是指微软)提供的;
2、PIA经过了厂商的优化处理,使之更容易被.Net调用;
(三)Office Primary Interop Assembly
所以,我们都应该使用PIA来访问Office COM组件,而不应该使用IA。那么如何把Office PIA安装到我们的电脑上呢?
如果我们的机器上已经安装了.Net Framework,那么在安装Office时,在安装向导的高级自定义选项中,我们在每个组件(Word、Excel、PowperPoint等)的子选项中,都能看到一个“.NET可编程性支持”,选择安装它,Office2003的安装程序就会自动把PIA安装到我们的计算机上。
另外,对于Office PIA的客户端分发(就是说,给我们软件的用户都统一装上PIA),微软专门提供了一个安装包。可以在http://www.microsoft.com/downloads/details.aspx?FamilyID=3c9a983a-ac14-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.Interop.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 Object Library”,相似的,Excel、Outlook、PowerPoint的COM组件名称都遵循这个规律)。
在上图中点击OK按钮后,在项目管理器中就可以看到,Visual Studio已经帮我们引用了需要引用的组件。实际上,除了我们选择要引用的Word组件外,其他额外但是必需的诸如Microsoft.Office.Core、stdole、VBIDE等组件也已经被自动引用进来了。
在上图的Word组件引用上点击鼠标右键,查看它的属性,在它的路径属性中,我们可以看到这个PIA文件其实是在“C:\Windows\assembly\...”目录中,这个目录也就是我们机器上的全局程序集缓存(GAC,Global Assembly Cache)所在的目录。这是因为Office PIA是被安装到机器上的GAC中,所以对Office PIA的引用会直接指向GAC中的相应文件。
二、深入浏览Office PIA
如果读者曾经使用过VBA进行过开发(或者使用其他的开发工具诸如VB/VC/Delphi直接调用过Office),那么其实你已经对Office COM接口有了一定的了解,因为在VBA编辑器中所编写的操作诸如Application、Document、Range的代码,其实正是在操作Office COM组件中的Application、Document、Range这些类。
我们已经知道,在Office PIA中,已经把Office COM组件进行了封装,所以我们可以预见,对于每一个Office COM组件中的类或者接口,在Office PIA的程序集中,我们应该都能找到一个对应的类或者接口。接下来,我们就用对象浏览器直接打开Office COM组件,然后再打开Office PIA,这样我们就可以对照它们,更清楚的理解它们。
font-family:
发表评论
-
程序集与托管模块
2010-10-26 16:22 1240本文是为了学习程序集而整理的网上资料,主要包括两个部分,概念和 ... -
.NET程序集
2010-10-26 15:03 2231【主要内容】@将源代码 ... -
strong-named
2010-10-26 14:48 875前段时间自己整理的一个有关strong-named assem ... -
CLR笔记(二)
2010-10-26 13:53 9816.类型和成员基础 1.Class的可见性有publi ... -
CLR笔记(一)
2010-10-26 13:22 18041.CLR的执行模型 ... -
Java调用C#
2010-10-25 22:49 1838Java调用C# 下载: http://www.co ... -
Managed Extensions for C++ Reference
2010-10-25 18:10 1388Managed Extensions for C++ Refe ... -
注入托管代码
2010-10-25 17:18 1720前言:本文的重点不在 ... -
jni调用dll及dll已用其它dll的资料
2010-10-25 16:00 898http://blog.csdn.net/KONGKONGWJ ... -
C# method calls within a Java program
2010-10-23 16:11 1065.net产生的比java晚,其类库的封装在某些方面也比ja ... -
走近COM Interop
2010-10-23 15:40 1636走近COM Interop—— RCW ... -
get chartobjects from VB.net
2010-10-18 10:34 1340Excel.Sheets sheets = oWB.Works ... -
VB.NET调用DLL实现方法解析
2010-10-13 10:43 3510VB.NET开发平台 ... -
VB.net 的Me My MyBase MyClass
2010-10-11 23:46 2014第一次接触 Visual Basic 中的 Me、My、M ... -
Exposing .net Components to Com
2010-10-11 09:47 813http://www.codeproject.com/KB/C ... -
.net Com组件注册
2010-10-11 09:30 1962本文将详细为大家介绍一个java调用.net DLL的方法,以 ... -
vb.net 封装组件成com的方法
2010-10-10 17:16 1538前几天一直在研究如何将.net的组件封装成com供非托管代码调 ... -
Writing an Activex control in VB.net
2010-10-09 22:33 1405The problem with that example i ... -
VB set Excel color
2010-10-08 17:30 938Sub Macro3()'' Macro3 Macro' ' ...
相关推荐
这些接口库允许开发者使用C#、VB.NET等.NET语言来调用和控制Office应用,如Word、Excel、PowerPoint等,进行自动化处理、数据集成或创建自定义功能。 标题中的"OfficePIA开发库14"指的是适用于Office 2010的版本。...
Office 2007 PIA(Primary Interop Assemblies)是微软为开发者提供的一种接口,使得.NET Framework的应用程序能够与Office 2007组件,如Word和Excel,进行无缝交互。这些接口集成了COM(Component Object Model)...
在这种情况下,Microsoft Office Primary Interop Assemblies (PIA) 提供了一个方便的接口,让我们能够利用C#、VB.NET等.NET语言直接操作Excel应用程序。本文将详细探讨如何使用.NET中的Excel PIA组件来生成Excel。 ...
在.NET环境中,尤其是使用Visual Studio进行开发时,PIA使得开发者可以使用C#、VB.NET等.NET语言来调用和控制Word、Excel、PowerPoint等Office应用程序的功能,而无需深入理解COM组件的复杂性。通过引用Microsoft....
首先,我们需要了解的是VSTO(Visual Studio Tools for Office),这是Visual Studio的一个扩展,它允许开发者使用.NET Framework和Office PIA(Primary Interop Assemblies)来编写Office解决方案。PIA是微软提供的...
使用Office的接口是COM,从Office XP开始,微软提供了Primary Interop Assembly(PIA)来供.NET访问Office的COM接口。在使用VS2008中的VSTO开发OFFICE应用程序(如试卷生成系统)时,不安装O2003PIA.MSI会报错,提示...
vs安装部署“必备”组件里面正常情况没有出现office2010 pia组件 解压本文件夹放在C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\目录下即可。
12、使用起来比Office PIA的API更加方便,更人性化。 13、你不用去花大力气维护NPOI,NPOI Team会不断更新、改善NPOI,绝对省成本。 14、不仅仅对与Excel可以进行操作,对于doc、ppt文件也可以做对应的操作 NPOI之...
Office XP PIA <br>office 开发程序集
- 微软Office提供了一组称为Primary Interop Assemblies (PIA) 的接口,允许.NET代码与COM对象(如Excel应用程序)交互。在C#中,这通常通过引用`Microsoft.Office.Interop.Excel`命名空间来实现。 3. **Excel对象...
.NET Common Language Runtime (CLR) 负责管理内存分配和回收,使用自动垃圾回收机制来释放不再使用的对象所占用的内存。 **2.14 Finalize() 与 Dispose() 的区别** Finalize() 是析构函数,由 GC 自动调用;...
VSTO提供了与Office对象模型交互的接口,使得开发者可以使用C#、VB.NET等语言来创建Office Add-ins。 2. **vstorlp**:这可能是VSTO的本地化版本,用于支持不同语言环境的安装和运行。 3. **vstor30**:这可能指的是...
标题中的“O2003PIA安装程序”指的是Microsoft Office 2003 Primary ...总的来说,O2003PIA是连接.NET世界和Office 2003生态系统的关键组件,对于开发基于Office的自定义解决方案或修复与Excel交互的问题至关重要。
- ESRI为ArcObjects提供了一组Primary Interop Assemblies(PIA),使得.NET开发人员可以直接引用这些库而无需额外的互操作层。 - **1.4.3 COM与.NET的交互方式** - 包括直接引用、动态代理等方式,方便.NET应用与...
ArcObjects与.NET的结合使得GIS开发者能够充分利用.NET环境下的高级特性,如垃圾回收机制、类型安全性和面向对象编程。 ##### 1.3.1 .NET环境简介 .NET Framework不仅提供了一种执行环境,还提供了一个全面的类库...
Microsoft.Office.Interop.Word.dll Microsoft.Office.Interop.Access.dll Microsoft.Office.Interop.Excel.dll Microsoft.Office.Interop.Outlook.dll Microsoft.Office.Interop.PowerPoint.dll .etc
在IT领域,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用和.NET框架中。在C#中调用Office宏是一项常见的任务,这允许程序员利用已有的VBA(Visual Basic for Applications)代码来增强C#应用的功能。下面...
PIA将COM接口转换为.NET接口,使得.NET代码可以像使用.NET类一样使用COM对象。 2. **使用TypeLibImporter (tlbimp.exe)**:这是一个命令行工具,它可以将COM类型库转换为.NET的元数据,生成.NET可以理解的代理类。...