我们创建了一个使用Office 2007(Excel 2007)从Excel工作表读取数据的应用程序。然而。我注意到,当我想在安装了Office 2003的系统上部署应用程序时,它会崩溃,因为需要为此版本的Office引用其他PIA(和其他dll)。使用Office自动化支持不同的Office版本
我是否需要编译我的应用程序的不同版本才能支持不同版本的Office,或者是否存在针对此问题的更优雅的解决方案?
我使用Visual Studio 2010(C#)和.Net 4.0平台。
我们创建了一个使用Office 2007(Excel 2007)从Excel工作表读取数据的应用程序。然而。我注意到,当我想在安装了Office 2003的系统上部署应用程序时,它会崩溃,因为需要为此版本的Office引用其他PIA(和其他dll)。使用Office自动化支持不同的Office版本
我是否需要编译我的应用程序的不同版本才能支持不同版本的Office,或者是否存在针对此问题的更优雅的解决方案?
我使用Visual Studio 2010(C#)和.Net 4.0平台。
当您使用.NET 4时,您可以使用“嵌入式”PIA(又名“无PIA”)。更改Office引用上的选项,以便“嵌入Interop类型”为True。
只要您只使用您部署的计算机上支持的Office功能,您应该没问题。
这也意味着: - 您不必担心PIA本身不存在在目标机器上 - 任何方法或性能,这是在原来的COM接口VARIANT
类型的使用,现在代表dynamic
在你的代码中,这可以使你的生活更简单
您可以参考PIA的多个版本的办公室,并找出运行时路由您的呼叫。
这就是你不应该做的:http://blogs.msdn.com/b/andreww/archive/2007/06/15/can-you-build-one -add-in-for-multiple-versions-of-office.aspx – Andy
这实际上是一个**好的主意。我也想这样做,因为在我的公司我们有安装了不同Office版本的系统。我希望我的应用程序支持任何**版本。 – Bitterblue
根据你是否有其他要求(你说从excel中读取数据),你可以使用OLEDB驱动程序连接到excel文件并在SQL中查询它方式。
例子: http://codehill.com/2009/01/reading-excel-2003-and-2007-files-using-oledb/
这会让我2年前的生活变得容易得多。在vs05中编写vsto插件是一件麻烦事。 – asawyer
这解决了我的问题。非常感谢你。 – Chris