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

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

但是,如果客户可以使用它,这一切都是无关紧要的。

如何以编程方式确定用户已经安装的Interop.Excel的版本? 一旦我知道他们有什么版本,我怎样才能在运行时加载这些程序集来访问Interop对象呢? 例如,如果用户安装了Interop.Excel 14.0,那么这是否意味着他们肯定也安装了Excel? 我应该如何检查安装了哪个版本的Excel?

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

我们计划支持Excel 2007,2010和2013。

总之 – 我如何覆盖我所有的基地?

Interop.Excel中有很多问题,但是没有任何说明我的意思,

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

b)我如何通过反思进行检查(避免registry查找)

谢谢。

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

不,互联网用于将来自托pipe编程语言的调用编组到非托pipe应用程序。

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

通常,Windowsregistry用于检测已安装的Office版本。 请注意,PC上可以安装多个Office版本。 您也可以尝试以编程方式运行Office应用程序,然后在运行时检出Version属性。 请参阅如何从Microsoft Visual C#.NET自动化Microsoft Excel以获取更多信息。

我们计划支持Excel 2007,2010和2013.总之 – 我如何在这里覆盖我所有的基地?

使用对应于您需要支持的最低Office版本的最早的互操作。 因此,您将确保您使用所有Office版本中提供的方法和属性。 或者我的embedded式互操作程序集(types)到您的应用程序。 当您以.net 4.0及更高版本为目标时,此function可用。

这里有更简单的解决scheme。 在我的情况下,我需要分离我的代码stream由于Excel Interop版本。

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.. }