如何检查,以编程方式,如果MS Excel存在于电脑上?

我有一个需要MS Excel运行的应用程序,否则它崩溃。 所以我想检查并警告用户,以防Excel未安装在用户的机器上。

我该怎么做呢?

Type officeType = Type.GetTypeFromProgID("Excel.Application"); if (officeType == null) { //no Excel installed } else { //Excel installed } 
 const string ASSEMBLY2003 = "Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"; static bool IsAssemblyInstalled(string assembly) { try { s_assemblyExcel = Assembly.Load(assembly); return true; } catch { return false; } } 

这将做的伎俩,只是为所有版本

也可以这样做

 RegistryKey key = Registry.ClassesRoot; RegistryKey excelKey = key.OpenSubKey("Excel.Application"); bool excelInstalled = excelKey == null ? false : true; 

作为一个快速解决scheme,你可以捕获exception并实现适当的error handling。 然后你可以在那里通知用户。

这里的博客文章介绍了如何validationExcel是否通过registry (VB.NET代码,但可以很容易地转换为C#)安装。 基本上,你要通过HKEY_CLASSES_ROOT\Excel.Application\CurVer键进行validation。

这并没有回答你的具体问题 ,但从另一个方向来解决它…

是否真的需要安装MS Excel ,或者您是否需要计算机才能显示Excel文件 ? 例如,如果用户安装了LibreOffice或其他类似Excel文件兼容的应用程序,那么这是可以接受的吗?

我们有一个应用程序,为用户打开Excel文件和PDF文件。 我们并不关心他们用户在他们的电脑上有什么软件来查看这些文件。 这不是我们所关心的。 我们只需简单地Process.Start(...)文件,然后让操作系统从那里获取它。

我们确实将这个调用包装在一个Try/Catch块中,并且如果这个调用导致了一个错误,提供给用户build议。 build议,就像他们可能没有安装Office(Excel),或者他们缺less一个PDF查看器。 基本上,我们不是主动地试图确定用户的计算机是否处于完全的状态来执行这个动作,而是假定它是,但是当我们没有发现它的时候处理这​​种情况。