怎样在.NET中调用Office组件

来源:互联网 发布:淘宝开店失败经验 编辑:程序博客网 时间:2024/05/27 16:43

在几台安装了Visual Studio .Net,Excel 2003的机器上,从VS2003的项目中添加对Excel组件的引用,但是在不同的机器上,对引用的组件可能产生两种不同的名字空间:
一种是Microsoft.Office.Interop.Excel.Application,另一种是Excel.Application。 

这种原因是因为为了在.Net早期绑定COM组件,首先需要根据COM的类型信息生成一个.Net Assembly实现对COM的封装,这种类型的Assembly被称为COM interop assemblies。尽管COM interop assemblies的创建不受限制;但是,对于一个COM组件,最多只能有一个Primary COM interop assembly(PIA)。PIA由组件发行者发布,包含了相关COM类型的信息,是正式的interop assemblies。同时,为了便于在Managed Code中使用,在PIA中往往会包含进行一些定制。 

微软为Office XP和Office 2003都提供了PIA,Office XP的PIA需要单独下载;在Office 2003中,当选择完全安装时,Office 2003 PIA将会被部署到GAC中。 

当在.Net中添加COM引用时,系统会在GAC中寻找该类型库对应的PIA,如果找到,则将引用该PIA(Office PIA名称空间以Microsoft.Office.Interop开头);否则,.Net将会根据类型库创建一个interop assembly(此时interop assembly将会使用COM类型库信息生成名字空间,也就是您看到的Excel.Application)。 

解决方案: 
如果您的应用程序需要支持多个Office版本,在开发时请确保总是使用最低版本的功能。

1. 早绑定,使用interop assemblies
a) 如果需要支持Office 2000、XP和2003
由于微软没有为Office 2000提供PIA,您需要使用tlbimp或者Visual Studio .Net生成一个interop assembly,然后在各开发环境上引用该assembly
b) 如果需要支持Office XP和2003
引用Office XP PIA
c) 仅需要支持Office 2003
引用Office 2003 PIA

2. 晚绑定 
作为替代的方案,您可以考虑采用晚绑定动态的调用COM组件。但是这样将会失去在开发时的类型支持,同时对性能也有影响。 

参考资料: 

《Working with the Office XP Primary Interop Assemblies》
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnoxpta/html/odc_oxppias.asp

《Office Primary Interop Assemblies》
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_wrcore/html/wrrefofficeprimaryinteropassemblies.asp

《Target Office Applications Through Primary Interop Assemblies》
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_wrcore/html/wrtsktargetingofficeapplicationsthroughpias.asp

《使用 Visual Studio .NET 开发 Microsoft Office 解决方案》
http://support.microsoft.com/?id=311452 

《使用 Visual C# .NET 绑定 Office 自动化服务器》
http://support.microsoft.com/?id=302902

原创粉丝点击