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

How can I determine the version of Microsoft.Office.Interop.Excel on a client computer?

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

谢谢。

If the user has, for example, Interop.Excel 14.0 installed, does that mean they definitely have Excel installed too?

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

How should I check for which version of Excel is installed?

通常 windows 注册表用于检测已安装的 Office 版本。请注意,PC 上可以安装多个 Office 版本。您也可以尝试以编程方式 运行 Office 应用程序,然后查看 Version property at runtime. See How to automate Microsoft Excel from Microsoft Visual C#.NET 了解更多信息。

We plan to support Excel 2007, 2010, and 2013. In short -- How do I cover all of my bases here?

使用与您需要支持的最低 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..
}