如何在客户端计算机上确定Microsoft.Office.Interop.Excel的版本

本文关键字:Office Microsoft Interop Excel 版本 客户端 计算机 | 更新日期: 2023-09-27 18:00:17

我有一个应用程序需要使用Microsoft.Office.Interop.Excel程序集(没有什么疯狂的,只是简单地写入工作表)
在编译时,我使用的是Microsoft.Office.Interop.Excel 15.0。我安装了Office 2013,一切都如预期。

但就客户是否可以使用而言,这一切都无关紧要

如何用程序确定用户安装的Interop.Excel的版本一旦我知道它们的版本,我如何在运行时加载这些程序集以访问互操作对象例如,如果用户安装了Interop.Excel 14.0,这是否意味着他们肯定也安装了Excel?我应该如何检查安装了哪个版本的Excel?

我知道用户需要安装Office才能使用Interop.Excel对象,所以这是否意味着我需要检查Office版本和Interop程序集版本?

我们计划支持Excel2007、2010和2013。

简言之,我如何在这里覆盖所有的基地?

关于Interop.Excel有很多问题,但没有什么能让我明白:

a) 我需要在客户端计算机上检查什么

b) 我如何通过反射进行这些检查(避免注册表查找)

谢谢。

如何在客户端计算机上确定Microsoft.Office.Interop.Excel的版本

例如,如果用户安装了Interop.Excel 14.0,这是否意味着他们肯定也安装了Excel?

否,互操作用于将调用从托管编程语言编组到非托管应用程序。

我应该如何检查安装了哪个版本的Excel?

通常,windows注册表用于检测已安装的Office版本。请注意,电脑上可能安装了多个Office版本。此外,您可以尝试以编程方式运行Office应用程序,然后在运行时签出Version属性。有关详细信息,请参阅如何从Microsoft Visual C#.NET自动化Microsoft Excel。

我们计划支持Excel2007、2010和2013。简言之,我如何在这里覆盖所有的基地?

使用与您需要支持的最低Office版本相对应的最旧互操作。因此,您将确保使用在所有Office版本中都可用的方法和属性。或者我在应用程序中嵌入的互操作程序集(类型)。当您的目标是.net 4.0及更高版本时,此功能可用。

这里有更简单的解决方案。在我的情况下,由于Excel互操作版本,我需要分离我的代码流。

Microsoft.Office.Interop.Excel.Application oXL = new Microsoft.Office.Interop.Excel.Application();
if(oXL.Version.Equals("15.0"))
{
   //bla bla..
}
else if(oXL.Version.Equals("14.0")||oXL.Version.Equals("12.0") || oXL.Version.Equals("11.0"))
{
   //bla bla..
}