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

时间:2015-06-29 15:52:53

标签: c# excel office-interop

我有一个需要使用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)我如何通过反思进行检查(避免注册表查找)

感谢。

2 个答案:

答案 0 :(得分:1)

  

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

不,interops用于从托管编程语言到非托管应用程序的编组调用。

  

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

通常,Windows注册表用于检测已安装的Office版本。请注意,PC上可以安装多个Office版本。您也可以尝试以编程方式运行Office应用程序,然后在运行时检出Version属性。有关详细信息,请参阅How to automate Microsoft Excel from Microsoft Visual C#.NET

  

我们计划支持Excel 2007,2010和2013.简而言之 - 我如何在此处涵盖所有基础?

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

答案 1 :(得分:1)

这里有更简单的解决方案。在我的情况下,由于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..
}